Как создавать богатые объекты домена, сохраняя при этом игнорирование персистентности?

Во-первых, я использую веб-формы без какой-либо структуры ORM.

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

Основные повторяющиеся проблемы, которые я вижу, заключаются в следующем:

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

  • У меня есть отдельный POCO для записей журнала транзакций, когда подарочный сертификат погашается. Я предполагаю, что мне следует поместить список или коллекцию этих транзакций как свойство моей модели подарочного сертификата, но я все еще не уверен, когда это свойство должно быть заполнено. Могу ли я добавить в службу отдельный метод для загрузки транзакций в объект по запросу (например, LoadTransactions (объект gc))или должны ли транзакции автоматически загружаться каждый раз, когда запрашивается существующий подарочный сертификат или список подарочных сертификатов (или, может быть, опция в getGCs также загружать транзакции)

  • А как насчет вычисленных полей, таких как «Доступный баланс» ... У меня даже есть такие свойства на моем объекте? Каждый раз, когда я работаю с объектом, мне нужно будет постоянно обновлять это свойство, чтобы гарантировать его актуальность. Прямо сейчас у меня просто есть служебный метод GetBalanceByCode (код gc).

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

6
задан jpshook 1 June 2011 в 14:31
поделиться