Стратегия доменного дизайна в 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, - это хорошее место, чтобы начать думать о том, как создать модель предметной области. Попробуйте создать "файл отображения гибернации", как если бы вы собирались сохранить все это в базе данных, а затем запустить инструмент, который превращает этот файл в объекты. Это обычно способствует хорошему дизайну модели предметной области.