OOAD Design issue

与世无争的帅哥 提交于 2019-12-02 10:01:39

Add a DAO tier that will contain the logical part of the methods save, delete, update, etc.

Here is how I usually do:

  • basepackage.domain: contains all your entities (data only, no logical part - in your case Product and Customer)
  • basepackage.dao: contains all your DAOs, only used to access the data, basically one per entity, each one containing methods such as findAll() : List<E>, findOne(K id) : E, save(E e) : void, etc.
  • basepackage.service: contains all your services, the logical part of the app. The services are the only ones that are calling the DAOs.
  • basepackage.presentation (or basepackage.web for a webapp): contains the HMI/web services/... implementation.

What your teacher probably means is that you need a third table, named something like "CustomerProduct". This table contains the links between customers and which products they've bought.

tblCustomerProduct:
    Id: Integer, auto-increament
    CustomerId: Varchar(30)
    ProductId: Varchar(30)

so, when a customer buys a product, you add this data to the table CustomerProduct. This will remove redundant data and also make deletion alot easier

Your teacher is right. It is not good Design because A class that you create should be cohesive. So that it should be responsible for doing the things that it can do. Here in your product class you have added customer id which is essentially a bad practice because A customer may purchase multiple products. This design will fail in that case. And also Product class doesn't need to know anything about the customer. All it has to know about is itself.

The relation between customer and product is an association which can be expressed as "customer buys product". So that customer id should not be there in product table.

Regarding the currentCustomer.addProduct(pd); method, it is not well suited because it is more suitable to product class rather than customer class.

The simple solution to your problem can be create a new class which can relate product and the customer.

For e.g.

CustomerProduct

customerid
productid

Inside this class you can add method like "AddProductForCustomer" and can write your database logic which will maintain the consistency.

Hope this clears your doubt.

In the table, the customer is assigned to a product, but in the method you give a customer and add a product.

So I would go for either a method pd.setCustomer(currentCustomer) instead of currentCustomer.addProduct(pd)

Or change the customer field in the product table to a products field in the customer table.

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!