2009-02-05 6 views
6

Я пытался обдумать DDD и как он может относиться к MVC, но у меня возникают проблемы с идентификацией объекта.Управление доменом, SOC и идентификация объекта

В частности, я стараюсь поддерживать строгое разделение между моделями моей презентации, домена и данных. Мое зависание здесь заключается в том, как я сохраняю идентификацию объекта через эти границы. Чтобы уточнить, я использую отдельные классы для представления одного и того же объекта в разных контекстах - например, у меня есть класс домена «ShipmentRequest», несколько классов презентаций «ShipmentRequestView» (в зависимости от свойств, необходимых для определенного вида), и таблица «shipment_request» (моя модель данных).

Я чувствую, что использование свойства «ID» (например, ShipmentRequestId) будет нарушением разделения, которое я пытаюсь достичь, поскольку это свойство ID является проблемой базы данных, а не проблемой для домена; и я не хочу передавать один и тот же объект между слоями, поскольку это означало бы передачу ненужных данных в мой уровень представления.

Как сохранить это разделение и тем не менее отслеживать идентичность между этими слоями?

ответ

2

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

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

Я думаю, что разделение проблем в основном обусловлено ограниченным контекстом. Например, ваша таблица Person, PersonView и Person все, похоже, относится к контексту обработки транзакций. В таком контексте я бы даже не имел PersonView, и таблица персонажа была бы абстрагирована.

С другой стороны, если вы находитесь в контексте отчетности, PersonView будет более полезен.

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

Что касается отсутствия естественного ключа в вашей личности, это может означать, что Личность не является сущностью. Например, в любом приложении реальной жизни всегда есть число, связанное с человеком: у сотрудника есть номер сотрудника, клиент в качестве номера учетной записи и т. Д. Этот бизнес-идентификатор определенно является частью домена.

+0

Если лицо не является сущностью, что это такое? Это не может быть объект ценности - более одного физического лица могут иметь одно и то же имя и другую статистику. Независимо от того, что я использую Person в качестве примера, не являюсь представителем домена, с которым я фактически работаю. –

+0

Тем не менее, ваша точка зрения о контексте важна. Спасибо. =) –

+0

Человек часто используется в качестве стандартного примера, который используют люди, но я думаю, что это плохой пример, потому что нет контекста. –

1

Я думаю, что наличие поля «ИД» на объектах - это уступка много (большинство?) Людей в конечном итоге делают, и я бы не чувствовал себя виноватым за это.

Как вы говорите, даже если вы не имеете дело с базой данных, вам все еще нужно понятие личности. Вы можете попытаться найти какую-то «естественную» идентичность для каждой сущности (поле, например имя или комбинацию нескольких полей), но это не всегда возможно. Даже когда это так, наличие поля идентификатора часто выступает в качестве удобной короткой формы для выражения «сущность, чье имя X, а дата рождения - Y, а SSN - Z».

В конце концов, хотя, возможно, менее «чистый», имеющий поле идентификатора, вероятно, упростит многое.

+0

Возможно, это, в конце концов, то, что мне в итоге придется делать. Спасибо за ответ. =) –

1

Отправка запроса, безусловно, лучший пример!

Как пользователи смогут найти транспортный запрос? В зависимости от ответа вам может понадобиться идентификатор, который пользователи могут запомнить, например, 20091012-A.

Может ли когда-либо изменить идентификатор запроса на отправку? Если нет, используйте ключ db для идентификации.

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

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

+0

Пользователи находят SRs через механизм поиска или перечисляют SR, принадлежащие клиенту, и т. Д. Идентификаторы * могут * использоваться * (например, в электронных письмах) для указания конкретных SR, но SRs никогда не потребляются другими системами. Я думаю, что ключ БД - это способ пойти на это. –

Смежные вопросы