Java对象构造函数和良好实践
我目前正在开发一个Java EE应用程序,因此我的应用程序服务器端有多个层(简而言之):Java对象构造函数和良好实践,java,jakarta-ee,constructor,Java,Jakarta Ee,Constructor,我目前正在开发一个Java EE应用程序,因此我的应用程序服务器端有多个层(简而言之): 实体和道 BO和服务 DTO和控制器 我的问题是,由于我总是将实体转换为BO以防止DB覆盖并减少工作负载,因此在BO中包含一个以实体为参数的构造函数是否是一种良好的做法 请参见下面的我的代码: Livraison.java package my.tree.model; imports @Entity public class Livraison { @Id @GeneratedVa
- 实体和道
- BO和服务
- DTO和控制器
package my.tree.model;
imports
@Entity
public class Livraison {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private LocalDate date;
@ManyToOne
@JoinColumn(name = "FournisseurId", nullable = false)
private Fournisseur fournisseur;
@ManyToOne
@JoinColumn(name = "CategorieId", nullable = false)
private Categorie categorie;
private Integer netTotal;
private String prefixCode;
private Integer compte;
@Transient
private List<Palette> palettes = new ArrayList<>();
public Livraison() {}
public Integer getId() {
return id;
}
//getters and setters
}
package my.tree.bo;
import Livraison;
public class LivraisonBo {
private int id;
private String date;
private int fournisseurId;
private int categorieId;
private Integer netTotal;
private String prefix;
private Integer compte;
public LivraisonBo() {
}
//classic constructor
public LivraisonBo(int id, String date, int fournisseurId, int categorieId, Integer netTotal, String prefix, Integer compte) {
this.id = id;
this.date = date;
this.fournisseurId = fournisseurId;
this.categorieId = categorieId;
this.netTotal = netTotal;
this.prefix = prefix;
this.compte = compte;
}
// constructor taking an entity as parameter
public LivraisonBo(Livraison l) {
this.id = l.getId();
this.date = l.getDate().toString();
this.fournisseurId = l.getFournisseur().getId();
this.categorieId = l.getCategorie().getId();
this.netTotal = l.getNetTotal();
this.prefix = l.getPrefixCode();
this.compte = l.getCompte();
}
//getters and setters
}
这是个好习惯吗?或者我应该把这个方法放在服务类中吗?
感谢您的帮助。在我看来,创建转换器类将完成实体和BO之间的转换 如果您使用实体作为参数创建BO构造函数,那么您的BO将依赖于实体。这不是一个好的做法。因为这样一来,使用BO的人就需要有实体的定义 第一个选项带有多个参数也不是一个好的做法。将参数保持在5以下被视为良好做法
如果使用两个参数Entity和BO创建不同的转换器类,将使代码更清晰可读。此外,还将减少代码中不必要的依赖性。代码审查有一个
StackExchange
方面,我想你应该在那里问这个问题。我会看看,谢谢。这是困扰我的问题,但我不知道是否应该换一种方式。谢谢你的见解!同意,并添加我的2c:有一些库可以使相似对象之间的转换非常容易-请参见例如Mapstruct,因此请使用转换器类;它们是自动实现的。此外,模型(或域)应该是实现的逻辑中心,而不是持久性逻辑。因此,我更喜欢用域名命名业务对象(例如这里的Livraison
),并给JPA实体、DTO等赋予不同的名称(例如LivraisonEntity
,LivraisonDto
等)。@NikosParaskevopoulos是的,保留您建议的名称会更好。