关闭。这个问题是基于意见的。它目前不接受答案。
**想改进这个问题吗?**更新这个问题,这样就可以通过编辑这篇文章用事实和引文来回答。
4个月前关门了。
改进这个问题
我目前正在开发一个java ee应用程序,因此我的应用程序服务器端有多个层(简而言之):
实体与道,
bo和服务
DTO和控制器
我的问题是,由于我总是将实体转换为bo以防止db覆盖并减少工作负载,所以在bo中包含一个以实体为参数的构造函数是否是一种好的做法?
请参见下面的代码:
livraison.java文件
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
}
livraisonbo.java文件
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
}
这是个好习惯吗?或者我应该把这个方法放在服务类中?谢谢你的帮助。
1条答案
按热度按时间vaj7vani1#
在我看来,应该创建转换器类来完成实体和bo之间的转换。
如果用实体作为参数创建bo构造函数,那么bo将依赖于实体。这不是一个好的做法。因为那样的话,使用bo的人就需要有实体的定义。
而第一种多参数方案也不是一种好的做法。将参数保持在5以下被认为是良好的做法。
如果使用两个参数entity和bo创建不同的转换器类,将使代码更清晰易读。同时,将减少代码中不需要的依赖关系。