将产品连接到类别
Connect Product to a Category
我正在编写我的新 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; }
}
...但我认为产品可以 实现 类别,以便将所有信息都放在一个对象中,而不是在两个 类...
之间跳转
哪种写法最好?
您不应在 Java class 中逐字模仿底层数据库 table 结构。正确的做法以及我到目前为止使用的每种 ORM 方法如下:
Product
class 存储对 Category
实例的引用。
- 当从数据访问层中的数据库中获取记录时,您将显式编写代码以首先创建一个
Category
对象,然后将其传递给 Product
class 构造函数创建 Product
对象时。
这样,Java class 层次结构反映了 Product
及其相关 Category
之间的真实业务关系。这也有从应用程序中抽象存储细节的优势——考虑一下如果数据存储在 NoSQL 数据库中,您当前采用的方法会发生什么。但是,通过采用此答案中提供的方法,您只需更改数据访问层即可创建正确的对象 - 您的 class 设计保持不变(O Open-Closed 原则 SOLID).
我正在编写我的新 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; }
}
...但我认为产品可以 实现 类别,以便将所有信息都放在一个对象中,而不是在两个 类...
之间跳转哪种写法最好?
您不应在 Java class 中逐字模仿底层数据库 table 结构。正确的做法以及我到目前为止使用的每种 ORM 方法如下:
Product
class 存储对Category
实例的引用。- 当从数据访问层中的数据库中获取记录时,您将显式编写代码以首先创建一个
Category
对象,然后将其传递给Product
class 构造函数创建Product
对象时。
这样,Java class 层次结构反映了 Product
及其相关 Category
之间的真实业务关系。这也有从应用程序中抽象存储细节的优势——考虑一下如果数据存储在 NoSQL 数据库中,您当前采用的方法会发生什么。但是,通过采用此答案中提供的方法,您只需更改数据访问层即可创建正确的对象 - 您的 class 设计保持不变(O Open-Closed 原则 SOLID).