java对象构造函数和良好实践

mhd8tkvw  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(357)

关闭。这个问题是基于意见的。它目前不接受答案。
**想改进这个问题吗?**更新这个问题,这样就可以通过编辑这篇文章用事实和引文来回答。

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
}

这是个好习惯吗?或者我应该把这个方法放在服务类中?谢谢你的帮助。

vaj7vani

vaj7vani1#

在我看来,应该创建转换器类来完成实体和bo之间的转换。
如果用实体作为参数创建bo构造函数,那么bo将依赖于实体。这不是一个好的做法。因为那样的话,使用bo的人就需要有实体的定义。
而第一种多参数方案也不是一种好的做法。将参数保持在5以下被认为是良好的做法。
如果使用两个参数entity和bo创建不同的转换器类,将使代码更清晰易读。同时,将减少代码中不需要的依赖关系。

相关问题