Коллекция компонентов - имеет ли смысл? - PullRequest
2 голосов
/ 14 сентября 2011

Я использую NHibernate в течение некоторого времени и довольно часто, когда мне нужно отобразить коллекцию parent-child, в которой дочерние элементы полностью зависят от его родителя, я отображаю эти ассоциации как набор компонентов.

Я всегда думал, что, когда у детей нет собственного жизненного цикла, они должны отображаться как компоненты, чтобы быть логически правильными.Но я пытаюсь найти аргументы ближе к уровню реализации и не вижу никакой выгоды от наборов компонентов, которые я не могу легко получить, используя стандартное отображение один-ко-многим .Более того, я вижу некоторые серьезные минусы:

  • компоненты в таких коллекциях всегда удаляются и повторно вставляются при каждом обновлении, что может быть большим ударом по производительности, когда коллекция содержит сотни элементов
  • схема, сгенерированная по умолчанию, использует таблицу без первичного ключа для хранения компонентов - это противоречит рекомендациям базы данных

Каковы реальные сценарии, которые делают сопоставление набора компонентов действительно полезным?

1 Ответ

1 голос
/ 14 сентября 2011

Когда вы разрабатываете приложение, ваша главная забота должна быть связана с бизнес-логикой, поэтому вам нужно спроектировать свой доменный уровень, используя сущности и объекты значений.

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

Вы должны разработатьВаша модель домена должна быть как можно более независимой от постоянства, чтобы абстрагировать хранилище технических данных и сосредоточиться на бизнес-логике, которая является главной целью вашего приложения.

Когда вы достигнете реализации уровня отображения с использованием orm, например NHibernate,Вы отображаете объекты-значения как компоненты, потому что они не имеют идентичности, и не логично портить домен и помещать идентичность только для сохранения.Подумайте также о природе неизменности этих компонентов: когда вы меняете цвет или адрес, который вы на самом деле не изменяете, вы заменяете его, учитывая, что значения объектов регулярно малы, добавление явного идентификатора не принесет никакой пользы даже с точки зрения базы данных, так какВам не нужно будет индексировать их, искать их по идентификатору или даже запрашивать их отдельно, поэтому добавление идентификатора только усложнит хранение.

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

проверьте this и this для получения более подробной информации

...