2009-07-28 4 views
3

Я пытаюсь изучить и применить концепцию, основанную на доменах, в моей разработке программного обеспечения. Первое, что я пытаюсь сделать, это создать мою модель домена, основанную на потребностях бизнес-логики. Я также часто использую инструмент OR Mapping, такой как LLBLGen, NHibernate или Linq to SQL, для создания модели данных и доступа к данным. Модель домена и модель данных, однако, часто очень похожи, что заставляет меня задаться вопросом, какую пользу я получаю, поддерживая две модели.Лучшая практика применения доменного дизайна в .NET?

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

Заранее спасибо.

EDIT

Нашли хорошую article, с примерами кода, о Repository Pattern.

ответ

4

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

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

После этого я установил слой Presentation (обычно веб-страницы), а затем зафиксировал конкретную схему базы данных. Затем я реализую свои конкретные классы репозитория, которые могут быть L2S.

Я подготовил несколько статей здесь - http://www.duncangunn.me.uk/dasblog/2009/04/11/TheRepositoryPattern.aspx http://www.duncangunn.me.uk/dasblog/2009/06/27/MockingLinqToSQLRepositories.aspx

Следите в течение ближайших нескольких недель, как я буду документировать и предоставление образцов коды моей реализации, которая использует единицу работы шаблона также ,

2

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

Для большей части конфигурации мы используем Fluent NHibernate.

+0

Вы когда-нибудь сталкивались с ситуацией, когда ваша модель данных не соответствует вашим потребностям? Как вы справляетесь с этими случаями? Благодарю. – weilin8

+1

Это зависит от многого. Fluent NHibernate предоставляет возможность переопределить автоматическую вычитаемую конфигурацию. Означает, что вы можете отключить 90% вашего режима, а затем предоставить ручную конфигурацию для остальных. Однако, если вероятность того, что ваша модель данных будет в значительной степени несовместимой (например, унаследованной или сумасшедшей dba), я думаю, что лучше иметь реальный уровень доступа к данным, чтобы действовать как уровень абстракции. –

2

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

Хорошее определение совокупных корней дает более простой дизайн и приводит к потенциальному повышению производительности (масштабируемость посредством грид-вычислений, см. Gojko Adzic post).

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

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