2016-07-30 13 views
0

Я пишу свой новый проект 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; } 

} 

... но я думаю, что продукт может реализует категории для того, чтобы получить всю информацию в одном объект, а не прыгать между двумя классами ...

Каков наилучший способ написать его?

ответ

2

Вы не должны копировать структуру базы данных базы данных в своих классах Java дословно. Правильный способ сделать и где каждый ORM подход, который я работал на до сих пор используется следующим образом:

  1. Product класса хранит ссылку на Category инстанции.
  2. При извлечении записей из базы данных на уровне доступа к данным вы должны явно написать код для создания объекта Category, а затем передать его в конструктор класса Product при создании объекта Product.

Таким образом, иерархия классов Java отражает истинные деловые отношения между Product и связанным с ней Category. Это также имеет преимущество абстрагирования данных хранилища от приложения - рассмотрите, что произойдет с подходом, который вы сейчас используете, если данные должны храниться в базе данных NoSQL. Однако, приняв подход, представленный в этом ответе, вам нужно будет только изменить уровни доступа к данным для создания правильных объектов - дизайн вашего класса остается неповрежденным (O от Принцип открытого закрытого в SOLID).