Есть много видов отношений - рассмотрим
- Автомобиль и колеса
- Автомобиль и водитель
- Автомобиль и зарегистрированный владелец
- Клиент иСтрока заказа и порядка
- Школа и класс, а также экземпляр класса
Если вы посмотрите на моделирование UML, вы увидите такие понятия, как мощность и направление, а также различия между объединением и композицией и вопросыотносящиеся к жизненному циклу связанных объектов.
Тогда неудивительно, что нам нужен набор методов и шаблонов для работы с различными видами отношений.
Относительно d).Существует один главный принцип Закон Деметры или принцип наименьшего знания.
Одна из важных техник - Инкапсуляция уменьшает связь, скрывая информацию.Автомобили, вероятно, мало интересуются многими сведениями о людях, поэтому у нас может быть интерфейс IDriver в нашем классе Person, IDriver предлагает особые методы, о которых заботится Automobile.Общий принцип состоит в том, чтобы отдавать предпочтение программированию для интерфейсов.
После этого мы можем подумать о а).Создание.Поскольку мы склонны использовать интерфейсы, часто имеет смысл использовать фабричные шаблоны.Это оставляет вопрос о том, кто называет фабрику.Предпочитаем ли мы:
IPerson aPerson = myAutomobile.createDriver( /* params */);
или
IPerson aPerson = aPersonFactory.create( /* params */);
myAutomobile.addDriver(aPerson);
Здесь я думаю, что совершенно очевидно, что автомобили мало знают о людях, и поэтому второе - это лучшее разделение обязанностей.Однако, может быть, Orders мог бы разумно создавать OrderLines, а классы создавать ClassInstances?
б).Отслеживание?Вот почему у нас есть богатый набор классов Collection.Какие из них использовать, зависит от характера отношений (один-один, один-много и т. Д.) И от того, как мы их используем.Поэтому мы выбираем Arrays, HashMaps и т. Д. В соответствии с потребностями.Для Автомобиля / Колеса мы могли бы даже использовать атрибуты имен Автомобиля - ведь у Автомобиля ровно шесть колес (frontLeft, frontRight, backLeft, backRight, запчасти и рулевое управление).Если под «хранить» вы имеете в виду постоянство, то мы смотрим на такие методы внешних ключей в реляционной базе данных.Отображение между RDBMS и объектами в памяти все чаще управляется хорошими механизмами сохранения, такими как JPA.
c).Аудит?Я не видел, чтобы аудит применялся конкретно на уровне отношений.Ясно, что метод automotive.addDriver () может быть сколь угодно сложным.Если есть деловые требования для аудита этого действия, то совершенно очевидно, что это достойное место для этого.Это просто стандартный вопрос разработки ОО, вращающийся вокруг того, кто владеет информацией.Общий принцип: «Не повторяйте себя» настолько ясно, что мы не хотим, чтобы каждый объект, который вызывает addDriver (), должен был помнить для аудита, поэтому это работа Auto.