我有两个表:tblCustomer、tblProduct
tblCustomer:
Id: Integer, auto-increament
Name: Varchar(30)
....
tblProduct
Id: Integer, auto-increament
Name: Varchar(50)
customerId: Integer
....和两个类:Customer、Product
public class Product
{
private int id;
private int name;
/* Other stuffs */
}
public class Customer
{
private int id;
private String name;
private String phoneNumber;
/* get-set and others stuffs */
public static boolean add(Customer cus) {
/* This is for insert a customer to tblCustomer */
}
public boolean addProduct(Product pd) {
/* This is for insert a product to tblProduct with current customer Id */
}
}当客户注册帐户时,它调用:
Customer cus = new Customer(/* ... */);
Customer.add(cus);当客户购买产品时:
Product pd = new Product(/* ... */);
currentCustomer.addProduct(pd);但是我的老师说在面向对象的程序设计(甚至是面向对象程序设计)中是不正确的,因为Customer.addProduct是在tblProduct表上操作的,对吗?对于这种情况,什么是好的设计?
**更新:**产品还没有预定义,当客户购买产品时,商店会制作产品并交付给客户,所以很少发生两个相同的产品,那么tblCustomerProduct需要吗?
发布于 2013-05-03 17:55:51
添加一个DAO层,它将包含save、delete、update等方法的逻辑部分。
这是我通常的做法:
basepackage.domain:包含您所有的实体(仅包含etc.basepackage.service:数据,没有逻辑部分代码-在您的情况下,和Customer)basepackage.dao:包含您所有的DAO,Product仅用于访问数据代码,基本上每个实体一个,每个实体包含findAll() : List<E>,findOne(K id) : E,save(E e) : void,包含所有服务的方法,应用程序的逻辑部分<代码>e222>。服务是唯一调用DAOs.basepackage.presentation (或者webapp的basepackage.web )的服务:包含HMI/web services/...implementation.发布于 2013-05-03 17:56:27
您的老师的意思可能是您需要第三个表,名称类似于"CustomerProduct“。此表包含客户与他们购买的产品之间的链接。
tblCustomerProduct:
Id: Integer, auto-increament
CustomerId: Varchar(30)
ProductId: Varchar(30)因此,当客户购买产品时,您可以将此数据添加到表CustomerProduct。这将删除冗余数据,并大大简化删除过程
发布于 2013-05-03 18:00:33
你的老师是对的。这不是一个好的设计,因为你创建的类应该是内聚的。所以它应该负责做它能做的事情。在这里,您在产品类中添加了客户id,这本质上是一种糟糕的做法,因为一个客户可能会购买多个产品。在这种情况下,这种设计将失败。另外,Product类不需要知道客户的任何信息。它所要知道的就是它自己。
顾客与产品的关系是一种关联,可以表述为“顾客购买产品”。因此客户id不应该出现在产品表中。
关于currentCustomer.addProduct(pd);方法,它不太适合,因为它更适合于产品类而不是客户类。
您的问题的简单解决方案是创建一个新的类,它可以将产品和客户联系起来。
例如
CustomerProduct
customerid
productid在这个类中,你可以添加像"AddProductForCustomer“这样的方法,并且可以编写你的数据库逻辑来保持一致性。
希望这能消除你的疑虑。
https://stackoverflow.com/questions/16356106
复制相似问题