Шаблон репозитория с 2 сервисами и 2 слоями доступа к данным - C # DDD? - PullRequest
1 голос
/ 01 апреля 2009

Может кто-нибудь помочь, у меня 2 приложения и они практически идентичны. у них совершенно другой уровень представления (веб), а бизнес-логика и база данных практически идентичны. По сути, в одном приложении есть вещи, которых нет в другом.

поэтому мне было интересно, могу ли я сделать следующее, не нарушая никаких правил и т. Д.

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

Следовательно, к общему сервисному слою могут обращаться оба приложения, поскольку бизнес-логика идентична, но у них обоих есть другой сервисный уровень, в котором есть 5 или 6 методов, специфичных для этого фактического приложения

Уровень доступа к данным - я не вижу возможности делиться этим, поскольку есть 2 разных БД с структурой сущностей, следовательно, там есть EDM, поэтому он не динамический - и таблицы немного отличаются.

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

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

Это хорошая идея? Может быть, я неправильно понял, есть ли лучший способ?

Ответы [ 3 ]

1 голос
/ 13 апреля 2009

Если бизнес-логика в основном идентична, вам следует сначала сосредоточиться на этом. Если вы хотите использовать DDD, вам следует сначала указать свои организации и (бизнес) службы и поместить их в одну библиотеку.

Эти организации и бизнес-сервисы должны взаимодействовать с уровнем вашей инфраструктуры (вашим DAL). Если уровень инфраструктуры сильно отличается в этих двух приложениях, попробуйте работать с интерфейсами. Поэтому оберните уровень внутренней инфраструктуры интерфейсами и через эти интерфейсы общайтесь только от уровня домена до уровня своей инфраструктуры.

Чтобы привязать вашу бизнес-логику к реализации вашей инфраструктуры, вы можете использовать IoC / DI.

1 голос
/ 22 апреля 2009

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

Интерфейс, который описывает ваш репозиторий, принадлежит вашему уровню домена, но реализация принадлежит уровню инфраструктуры (DAL).

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

0 голосов
/ 01 апреля 2009

Вы можете объединить DAL с интерфейсом репозитория. Затем вы можете реализовать интерфейс в разных проектах. Вы, вероятно, также получите базовый класс EF Repository. Вы можете применить аналогичную технику к сервисам, использовать общий интерфейс и затем специализировать реализации сервисов.

...