Мне было интересно, что лучше всего подходит для архитектуры уровня предприятия на базе MVC5. Я имею в виду выбор между несколькими уровнями или несколькими проектами в одном решении? или, может быть, более одного решения? любой хороший пример проекта?
Какова наилучшая практика для архитектуры приложений уровня предприятия с использованием MVC5?
Ответ 1
Поскольку мой вопрос много раз посещался в прошлом году, и я не знаю, насколько я знаю, я решил дать исчерпывающий ответ в максимально возможной степени. Этот ответ основан на опыте некоторых конкретных проектов и с несколькими экспертными консультациями:
- Прежде всего, важно отметить, что при разработке программного обеспечения
процесс не имеет ничего общего с правильным и неправильным. До тех пор, пока
подход работает для вашего проекта и подходит хорошо, это
right, и если это не так, этоwrong. В программном обеспечении нет жестких принципов дизайн. ЕстьProject needs and specifications. Но в целом, он принят с использованиемDesign Patterns and Principlesделает выполните проектrobust,reliableиeasy to maintainи сделайте ваш кодloosely coupled and highly cohesive. - Вся история
Software Design and Architectureо том, как вы могли бы легко управлять своим проектом и как вы могли бы поддерживать свой будущие изменения. Подумайте, какой подход дает вам лучший ответ на их. Это будет лучше для вас. Не думайте слишком много оProfessionalism!. Ваш проект растет со временем и становится более зрелым. Так что просто подумайте о своем проекте! - В качестве первого шага и для архитектуры приложений уровня предприятия,
всегда старайтесь следовать
Separation of ConcernsилиSoC. Это означает, что вы должны иметь разные уровни для разных уровней вашего проекта. Это настоятельно рекомендуется использовать другой проект в вашем решение дляData Access Layer,Domain Entities,Business LayerиPresentation Layer. В проекте MVC5 лучше использоватьClass Library ProjectдляData Access Layer,Domain Entities,Business Layerи проект MVC дляPresentation Layer. -
Data Access Layer- это проект, который сталкивается с взаимодействием базы данных и базы данных. В этом проекте вы могли бы использовать всеEntity Frameworkили аналогичные объекты. Разделение слоя для уровня базы данных означает, что при изменении хранилища данных проекта вам нужно изменить только этот проект и некоторые незначительные изменения на вашемBusiness Layer. Все остальные проекты в вашем решении остаются нетронутыми. Таким образом, вы можете легко перейти от MS Sql к Oracle или отEntity FrameworkдоNHibernate. -
Domain Entities- это проект, который я использую для определения всего моего решения интерфейсы уровня, классы, перечисления и переменные. Этот проект сохраняет целостность во всем моем решении на моих классах и моих методах. мой все классы в целом решении наследуются от интерфейсов в этом проект. Поэтому у меня есть одно место, чтобы изменить мои классы или глобальные переменные, а это означаетeasy to maintainдля будущего в моем решении и легко понять для недавно присоединившихся разработчиков к проекту. -
Business Layer- это место, в которое я положил всю свою бизнес-логику, включаяBusiness EntitiesиBusiness Services. Вся идея о этот слой имеет одно место для хранения всех ваших бизнес-методов и взаимодействия. Все вычисления, модификация объекта и вся логика о данных, включая сохранение, извлечение, изменение и т.д., должны происходят в этом разделе. Имея этот слой в своем проекте, вы могут иметь разных потребителей одновременно, например один nativeMVCи одинWeb API. Или вы могли бы предоставить разные питание на основе различных бизнес-услуг потребителей технические характеристики. Настоятельно рекомендуется избегать бизнес-логики в секции контроллера уровня MVC. Наличие бизнес-логика внутри контроллеров означает, что вы используете презентацию как уровень бизнес-логики, и он нарушаетSeparation of Concerns. Тогда это не будет легко изменить с одного презентационного слоя на другого или с другим типом потребителей для вашего решение. Лучше держать секцию контроллера в MVC такой же тонкой, как возможное. Контроллеры должны иметь только логику и методы непосредственно связанный сView Models. Для получения дополнительной информации оView Modelsобратитесь к разделу7. Помните, что лучше имеют разные классыBusiness Services, основанные на вашем решении объектов илиBusiness Entities. -
Presentation Layerв MVC-решении будет проект MVC. Но решение может иметь другой тип или более одного уровня представления для разных потребителей или технологий. Например, вы могли бы один слой MVC и одинWeb APIв одном решении. Как правило, использование Уровень презентации, чтобы сохранить в нем всю логику представления. Логика представления не должна иметь ничего, что связано с бизнес-логикой или логики данных. Итак, вопрос в том, что такоеPresentation logic?Presentation logic- это логика, связанная с моделями просмотра. Просмотр моделей объекты, настроенные для просмотров или страниц. В большинстве случаев бизнес объекты не подходят для использования в представлениях. С другой стороны, представления представления обычно нуждаются в некоторой логике проверки или логика представления, например, отображаемое имя отличается от оригинала имена объектов. В этих случаях лучше вести логику представления разделены, чем бизнес-логика, чтобы упростить изменение презентации логики или бизнес-логики самостоятельно и даже легко переключаться уровень представления для дизайна пользовательского интерфейса или меняющегося бизнеса логика для обеспечения большей функциональности, не опасаясь прерывания с логикой представления. В случае использования проекта MVC в качестве уровень представления для решения, все модели просмотра должны бытьModelsв проекте MVC, и вся логика представления должна быть размещен в разделеControllersпроекта. - Последнее, что нужно сказать для каждого многоуровневого решения, вам нужно
рамки для сопоставления объектов с объектами, например, для преобразования
бизнес-объект для просмотра модели. Есть несколько инструментов для этого
такие как
AutoMapper,BLToolkitиEmitMapper.
Последнее слово: прокомментируйте и оцените question и мой answer, чтобы сделать его лучше!
Ответ 2
Взгляните на Contoso University. Отличный пример приложения уровня предприятия.