【发布时间】:2019-10-18 17:38:25
【问题描述】:
我将使用 spring-boot 和 spring-data-jpa 开发小型 Web 应用程序以了解微服务架构。
在初始阶段,我只有 2 个实体 (1) CountryEntity 和 (2) StateEntity。在我已经拥有的整体结构中,这两个实体之间存在关系,例如:
国家实体:
@Entity
@Data
@EqualsAndHashCode(callSuper=false)
public class CountryEntity extends BaseEntity{
private String countryCode;
private String country;
@OneToMany(mappedBy = "country", orphanRemoval = true, cascade = CascadeType.ALL)
private Set<StateEntity> stateEntities;
}
状态实体:
@Entity
@Data
@EqualsAndHashCode(callSuper=false)
public class StateEntity extends BaseEntity {
private String stateCode;
private String state;
@ManyToOne
private Country country;
}
另外,请注意我扩展了 BaseEntity,其中包含共享字段,例如:
基础实体:
@MappedSuperclass
@Data
public abstract class BaseEntity {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private Date createdDateTime;
private Date updatedDateTime;
private Boolean isActive;
private Boolean isDelete;
@PrePersist
private void setCreatedDateTime() {
this.createdDateTime = new Date();
this.isActive = true;
this.isDelete = false;
}
@PreUpdate
private void setUpdatedDateTime() {
this.updatedDateTime = new Date();
}
}
现在,在将上述单体结构转换为微服务时,我有 2 个查询,如下所述:
1. 我是否应该为上面定义的 BaseEntity 和其他类(如常量、实用程序等)创建共享库(共享代码的单独微服务,然后在所有不同的微服务应用程序中添加依赖项)?或者我应该重复所有微服务中的所有代码?请指导,因为一些网站建议共享库,一些专家建议不要使用共享库并建议重复所有代码。我应该怎么做才能获得更好的架构。
2. 如何在微服务架构中给出上述两个实体之间的关系?我经历了一些问题,一些反馈说这是不可能的。然后我有一个应用程序,其中所有实体都直接或间接地处于关系中。在这里,我只是以原始应用程序为例。我知道它必须是某种结构或某种方式,我可以通过它应用关系。请指导我。
非常感谢您。
【问题讨论】:
-
我真的很依赖你的项目。由于您正在开发一个小型私有的,因此您只需复制您的代码就可以了。既然 IIUC 无论如何都是出于学习目的,为什么不尝试两种方法并进行比较呢?在一个较大的项目中,您可能希望安装某种版本控制系统和一个文档服务器,可以访问通用数据结构,以便每个服务都可以检查其当前实现是否是最新的/兼容的。
-
第一个问题只有固执己见的答案,没有“更好的架构”。这正是您在访问这些网站时看到矛盾的原因,以及为什么此处发布的答案是 A 而 cmets/downvotes 则不然。您的第二个问题是您必须使用微服务以不同方式解决的问题之一,但涵盖这些问题将导致非常广泛的答案。
标签: java spring-boot spring-data-jpa microservices entity-relationship