Search code examples
javaoopooad

OOAD Design issue


I have two tables: tblCustomer, tblProduct:

tblCustomer:
    Id: Integer, auto-increament
    Name: Varchar(30)
    ....

tblProduct
    Id: Integer, auto-increament
    Name: Varchar(50)
    customerId: Integer
    ....

And two classes: 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 */
    }
}

When customer register account, it call:

Customer cus = new Customer(/* ... */);
Customer.add(cus);

and when customer buy a product:

Product pd = new Product(/* ... */);
currentCustomer.addProduct(pd);

But my teacher said it not correct in OOAD (and even OOP) because Customer.addProduct is operate on tblProduct table, is it right? What is good design for this case?

** Update: ** Product haven't a pre-defined yet, when a customer buy a product, the store will make it and delivery to customer, so two same products is rare happen, so is tblCustomerProduct need?


Solution

  • 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.