将产品连接到类别

时间:2016-07-30 16:34:18

标签: java software-design solid-principles

我正在编写我的新java项目,并且要求是表示可属于某个类别的产品。 我在我的项目中使用数据库,并通过外键连接产品和类别。 在代码中,我将使用SOLID设计,我不明白如何连接产品和类别。 在第一个版本中,代码是

public class Product {
    private int ID;
    private String name;
    private String descr;
    private int stock;
    private float price;
    private int category;

    public Product(int anID, String aName, String aDescr, int aStock, float aPrice, int aCategory) {
        this.ID = anID;
        this.name = aName;
        this.descr = aDescr;
        this.stock = aStock;
        this.price = aPrice;
        this.category = aCategory;
    }

    public int getID() { return this.ID; }

    public String getName() { return this.name; }

    public String getDescr() { return this.descr; }

    public int getStock() { return this.stock; }

    public float getPrice() { return this.price; }

    public int getCategory() { return this.category; }

    public void decreaseStock(int x) { this.stock -= x; }
}

public class Category {
    private int ID;
    private String name;
    private String descr;

    public Category (int anID, String aName, String aDescr) {
        this.ID = anID;
        this.name = aName;
        this.descr = aDescr;
    }

    public int getID() { return this.ID; }

    public String getName() { return this.name; }

    public String getDescr() { return this.descr; }

}

...但我认为产品可以 实现 类别,以便将所有信息放在一个对象中,而不是在两个类之间跳转... < / p>

哪种写作最好?

1 个答案:

答案 0 :(得分:2)

您不应该逐字模仿Java类中的基础数据库表结构。正确的方法和我迄今使用的每个ORM方法使用的方法如下:

  1. Product类存储对Category实例的引用。
  2. 从数据访问层中的数据库中获取记录时,您将显式编写代码以首先创建Category对象,然后在创建{{1时将其传递给Product类构造函数对象。
  3. 这样,Java类层次结构反映了Product及其相关Product之间的真实业务关系。这还具有从应用程序中抽象存储细节的优点 - 考虑如果数据存储在NoSQL数据库中,您当前采用的方法会发生什么。但是,通过采用本答案中提供的方法,您只需要更改数据访问层以创建正确的对象 - 您的类设计保持不变( O Open-Closed SOLID 中的原则。