N-слойная архитектура - PullRequest
       40

N-слойная архитектура

6 голосов
/ 18 января 2012

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

Краткая информация о проекте: это веб-приложение, ориентированное на данные.

Приложение будет построено на Microsoft.NET Framework 4.0 с базой данных MS SQL SERVER 2008.

Требование:

  1. Богатый пользовательский интерфейс и надежный
  2. Поддержка нескольких устройств (в каждом браузере и на каждом устройстве)
  3. Слабосвязанное

Ниже приведена архитектурная схема, которую я построил:

enter image description here

Краткое описание архитектуры

  1. Уровень представления: HTML5 / ASP.NET MVC + JQuery (веб-приложение для поддержки нескольких устройств в первой версии)
  2. Распределенные службы: WCF (XML / JSON / JSONP)
  3. ДоменУровень (Business Layer): вся бизнес-логика
  4. Постоянство данных (уровень DAL): Entity Framework 4.0 с базой данных в первую очередь.Объекты POCO создаются и разделяются с использованием шаблона T4
  5. Инфраструктурный уровень: содержит общие библиотеки, такие как объекты POCO, обработка исключений, ведение журнала и т. Д.

Мои проблемы:

  1. Поскольку приложение должно быть построено слабо связано , поэтому в будущем, если требования бизнеса возрастут, новые модули могут быть легко подключены без ущерба для архитектуры.Поэтому я подумал об использовании шаблона Repository вместе с IoC и DI (может быть Unity / Ninject / Sprint.NET или любым другим)
  2. WCF с поддержкой как XML, так и JSON
  3. Уровень распределенной службы дляПоместите IoC & DI
  4. Обработка исключений и ведение журнала с использованием Enterprise Library 5.0

Ищете ценные комментарии и предложения.Если я делаю что-то не так, пожалуйста, направьте меня в правильном направлении.

Ответы [ 4 ]

6 голосов
/ 18 января 2012

Я бы предложил следующий комментарий: с самого начала ваш подход создаст тесную связь. Это идет вразрез с вашим требованием # 3 "Слабосвязанная"

На вашей диаграмме вы определили два модуля. Основной модуль и Модуль 2. Я думаю, что эти два модуля довольно сильно отличаются друг от друга. Под этим я подразумеваю, что вы можете разработать их полностью отдельно, а затем подключить к ним, потому что проблемы бизнеса, которые они решают, различны.

Однако, ваш текущий архитектурный подход:

  • Объединяет данные основного модуля и модуля 2 в одну базу данных
  • Объединяет бизнес-объекты основного модуля и модуля 2 в один бизнес-уровень
  • Объединяет службы основного модуля и модуля 2 в один и тот же уровень обслуживания
  • Соединяет развертывание и управление основным модулем и модулем 2

Что может стоить рассмотреть: собрать основной модуль и модуль 2 в виде отдельных вертикальных служебных стеков.

Я имею в виду, что главный модуль и модуль 2 становятся основным обслуживанием и обслуживанием 2

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

Однако это вызывает беспокойство: как Main Service и Service 2 могут работать вместе для создания моего продукта?

Для решения этой проблемы:

  1. На пользовательском интерфейсе вы соединяете ваш внешний интерфейс, используя код на стороне клиента для загрузки ответов из основного сервиса и сервиса 2 в одно представление.

  2. В серверной части вы используете общедоступную рассылку сообщений, чтобы позволить Главной службе подписаться на события, происходящие в Службе 2, и наоборот.

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

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

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

1 голос
/ 18 января 2012

Почему на диаграмме архитектуры не используется доменный уровень для ASP.NET?

Мне кажется, что вы, возможно, занимаетесь чрезмерной архитектурой своего приложения.Кроме того, несмотря на то, что поддержка 6 (или около того) различных технологий переднего плана выглядит великолепно, усилия по их поддержке будут ужасными.Я бы придерживался одной технологии для внешнего интерфейса - скорее всего, HTML5 с клиентской стороной MVC или аналогичной.

1 голос
/ 18 января 2012

Имеет смысл, что интерфейсы WPF, WinForm и т. Д. Должны вызывать уровень WCF.Я предполагаю, что это бизнес-требование иметь несколько пользовательских интерфейсов, в противном случае, если вы можете иметь только один пользовательский интерфейс, адаптивный веб-интерфейс является наиболее гибким выбором.используйте слой WCF.Это может вызвать доменный слой напрямую.Это было бы быстрее и удалило бы бессмысленный слой.

Очевидно, это будет работать только до тех пор, пока вы не добавите никакой логики в свой слой WCF.И слой WCF действительно не должен иметь никакой логики.

Вы также заявляете, что хотите разместить IoC и DI на уровне распределенных сервисов.Это не имеет большого смысла с точки зрения вашего пользовательского интерфейса MVC.Вам нужно будет использовать DI в проекте MVC, чтобы вы могли модульно протестировать контроллеры.

0 голосов
/ 18 января 2012

Глядя на вашу диаграмму, у меня есть пара моментов, по которым мне непонятно:

  • Где находится модель домена?Доменное ядро ​​или «модель» на уровне постоянства?
  • Как уровень домена взаимодействует с уровнем доступа к данным?Взаимодействие не такое четкое, как между уровнем службы / приложения и уровнем домена.
  • В чем разница между хранилищем на уровне домена и хранилищем на уровне доступа к данным?Обычно я делаю различие между наличием «репозиториев моделей» на уровне домена, которые действуют на объекты модели домена, и «шлюзов данных» на уровне доступа к данным, которые действуют на DTO.
  • Что такое ядро ​​домена?Это реализация транзакций прикладного уровня?
  • Нужна ли дополнительная абстракция структуры персистентности?(EF)
...