Структура проектов DDD с WCF - PullRequest
       25

Структура проектов DDD с WCF

5 голосов
/ 30 ноября 2009

Я начинаю новый проект на основе WCF, который состоит из "Engine" и некоторых настольных приложений. Но мне было трудно создать структуру моего проекта.

  • Engine (служба Windows, на которой размещаются приложения служб WCF для настольных ПК и вся моя бизнес-логика)
  • Настольное приложение (только презентация)

  • Общий

  • MyProject.Core (Клиенты / Заказчик, Клиенты / ICustomerService)

  • Двигатель

    • MyProject.Engine (Клиенты / Служба поддержки клиентов, Клиенты / ICustomer, Клиенты / ICustomerRepository)
    • MyProject.Infrastructure.SqlServer (Клиенты / Клиент (специфично для LinqToSql), Клиенты / Клиентский репозиторий)
  • Приложение WinForm

  • MyProject.Core
  • MyProject.UI

Я прав?

1 Ответ

21 голосов
/ 30 ноября 2009

Если вы делаете DDD, мне кажется странным, что у вас нет модели домена. У вас есть так называемый движок, который имеет множество проблем. Он реализует вашу бизнес-логику и знает о размещении вашей бизнес-логики в качестве службы Windows.

Я бы предложил следующую структуру проекта:

MyProject.Model : Определяет абстрактные репозитории, сущности, объекты значений, сервисы (термин DDD) и другую логику домена. Нет ссылок на другие проекты

MyProject.DataAccess : реализация репозиториев с использованием linq2sql. Имеет ссылку на MyProject.Model

MyProject.ServiceModel : Содержит контракты на обслуживание и другие материалы, связанные с представлением модели вашего домена в качестве сервисов WCF. этот проект также будет содержать специфичные для службы представления тех объектов вашего домена, которые служба обслуживает и принимает. Причиной этого может быть то, что вам, вероятно, не следует украшать свои доменные классы атрибутами, необходимыми в контрактах данных WCF. Этот проект ссылается на MyProject.Model.

MyProject.Service : Содержит app.config для вашей службы и выполняет внедрение зависимостей через пользовательские ServiceHost и ServiceHostFactory. Он ссылается на MyProject.Model MyProject.ServiceModel и MyProject.DataAccess + ваш любимый каркас DI (например, Виндзорский замок)

MyProject.PresentationModel : Определяет различные модели представлений и команды для использования в вашем пользовательском интерфейсе. Он содержит ссылки на сервисы, предоставляемые MyProject.Service

MyProject.WinUI : Ваше приложение WPF. Ссылки MyProject.PresentationModel.

Обратите внимание, что большая часть того, что вы, вероятно, читали в книге Эрика Эванса о DDD, касается только содержимого MyProject.Model. Другие проекты составляют дополнительные слои, которые напрямую не рассматриваются в MR. Книга Эванса.

Помните, что, имея четкое разделение задач и используя внедрение зависимостей, вы получите код, который легко тестируется. С предложенной выше структурой вы сможете протестировать практически все, поскольку ваш пользовательский интерфейс будет содержать только XAML.

В любом случае, это только мое мнение. Пожалуйста, не стесняйтесь спрашивать, нуждается ли это в разъяснении.

Удачи в проекте.

/ Klaus

...