Главная страница   /   15.2. Обзор архитектуры приложения (ASP.NET MVC 4 в действии

ASP.NET MVC 4 в действии

ASP.NET MVC 4 в действии

Джеффри Палермо

15.2. Обзор архитектуры приложения

На широком уровне это приложение использует некоторые идеи проектирования на основе предметной области (domain-driven design или DDD) внутри так называемой "луковой архитектуры" (onion architecture), несмотря на то, что большинство идей DDD будут разрушены для такого простого приложения. На высшем уровне в ядре приложения расположена доменная модель. Рисунок 15-2 демонстрирует опорный макет "луковой архитектуры".

Рисунок 15-2: "Луковая архитектура" использует концепцию ядра приложения, которая не зависит от внешних библиотек таких, как NHibernate.

Структура решения реализует стратегию разъединения, которая необходима для "луковой архитектуры". На рисунке 15-3 вы можете увидеть эту структуру с раскрытыми референсами проекта Core. Приложение имеет простое ядро, а библиотеки, на которые ссылаются для реализации ядра, также довольно просты.

Рисунок 15-3: Проект Core имеет минимальное количество референсов и не имеет внешних зависимостей.

Заметьте, что из проекта Core не дается ссылка на NHibernate.dll. Важно, что ядро остается выделенным и не связано с внешними библиотеками. С течением времени библиотеки, которые вы используете, будут меняться так же, как и версии библиотек. Сохранение ядра независимым от такого перемешивания будет поддерживать его стабильность. Так же как и все в программном обеспечении, этот вариант является компромиссом. Возможно, вам будет удобно взаимодействовать с некоторыми библиотеками, но старайтесь убедиться в том, что вы тщательно оценили последствия. Данным пример применяет принцип инверсии управления (Inversion of Control или IoC) при помощи абстрактных фабрик и внедрения зависимостей.

Inversion of Control – это принцип, а не средство

В связи с популярностью IoC-контейнеров многие разработчики не знают, как реализовать IoC без такой библиотеки, как StructureMap. Многие разработчики имеют опыт использования механизма внедрения зависимостей, но только посредством использования IoC-контейнера.

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

Если мы раскроем большинство из проектов, как это показано на рисунке 15-4, то сможем увидеть, что ни один из проектов не ссылается на проект Infrastructure, за исключением IntegrationTests, который никаким образом не развертывается в производство. Только проект Infrastructure ссылается на NHibernate.dll. Когда мы будем рассматривать UI-проект, мы увидим, как организуется приложение во время выполнения для того, чтобы функционировать должным образом.

Рисунок 15-4: Ни один из проектов не ссылается на Infrastructure. Такое размещение важно для механизма разъединения.

Примечание

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

Теперь, когда вы поняли, как приложение структурировано на высшем уровне, мы постепенно рассмотрим каждый слой. Мы начнем с доменной модели проекта Core.