Стратегия доменного дизайна в Java

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

Рассмотрим объект Car, у которого есть регистрационный номер, марка, модель, колеса, двигатель.

Колесо может быть радиальным, трубчатым или бескамерным, с / без сплавов. Таким образом, вся информация о колесах заключена в классе Wheel. Точно так же вся информация о Engine инкапсулирована в класс Engine.

Теперь у меня есть два способа создать свой класс автомобилей

ДИЗАЙН I

public class Car{

   private String registrationNo;
   private String ownerid;
   private String brandId;
   private String wheelId;
   private String engineId;

   //getters and setters
} 

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

ДИЗАЙН II

public class Car{

       private String registrationNo;
       private Owner owner;
       private Brand brand;
       private Wheel wheel;
       private Engine engine;

       //getters and setters
    } 

Какая стратегия дизайна лучше и почему

3 ответа

Ну, подумав, я нашел обоснование того, почему DESIGN II лучше. Что делать, если мне нужно показать список объектов Car со всеми деталями двигателя и владельцем. Я не могу сделать это с дизайном я. Это возможно только с дизайном 2. С дизайном ii можно получить отдельные списки объектов Owner и объектов Engine, но я никогда не могу связать их с тем, какой владелец принадлежит какому автомобилю / двигателю. Другими словами, если мы ожидаем, что соответствующая информация (ENGINE, BRAND, OWNER) будет получена, мы должны использовать агрегацию.

Ассоциация против Композиции

Первый дизайн показывает связь между Car и другие компоненты, в то время как второй дизайн показывает состав.

  • Состав

    • Компоненты принадлежат Car,
    • Они не должны быть разделены несколькими Car s.
    • Есть отношения.
  • ассоциация

    • Совместное использование разрешено.
    • Оба могут существовать независимо.
    • Существует отношение "использует-а".

Так что это зависит от того, что лучше от ситуации.

Вы можете реализовать ассоциацию в случае Owner при использовании композиции для Engine а также Wheel s.

Надеюсь это поможет.
Удачи.

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

Инструменты ORM, такие как Hibernate, - это хорошее место, чтобы начать думать о том, как создать модель предметной области. Попробуйте создать "файл отображения гибернации", как если бы вы собирались сохранить все это в базе данных, а затем запустить инструмент, который превращает этот файл в объекты. Это обычно способствует хорошему дизайну модели предметной области.

Другие вопросы по тегам