2013-05-09 3 views
11

Я попытался структурировать свой последний значительный MVC-проект, следуя передовой практике, но не совсем понял, что делаю.Лучшая структура для решения ASP.NET MVC

У этого есть проект Data, Business и Web (MVC), но контроллеры содержат большую часть кода, слой данных использует NHibernate и имеет несколько репозиториев, ответственных за слишком много вещей, а бизнес-уровень - это свалка для чего-либо, что не относится к двум другим проектам. Он работает, но я чувствую, что он мог бы быть лучше настроен - главное, что я недоволен, - это контроллеры жира и хранилища.

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

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

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

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

У меня все в порядке? Должен ли я перестать пытаться слепо следовать тому, что я читаю в Интернете, и просто подготовить модели просмотра в бизнес-слое, чтобы я мог переместить основную часть моего кода там? Должен ли я просто вернуться к классическому ASP? :)

+0

Попробуйте следующие рамки: 1) ** Serenity.is ** - лучшая основа быстрого разработки приложений доступны, и лучший рейтинг шаблон в VSGallery. Serenity построен на популярных и высококачественных библиотеках с открытым исходным кодом, включая Bootstrap, SlickGrid, Dapper и JSON.NET. Объединив их с мощью ASP.NET MVC и TypeScript, он обеспечивает надежную и стабильную платформу приложений. [http://serenity.is/](http://serenity.is/) 2) ** Asp Net Boiler Plate ** - ASP.NET Boilerplate - это универсальная платформа приложений, специально разработанная для новых современных веб-приложений. Он использует уже знакомый t – mijaved

+0

@mijaved Пожалуйста, объективны здесь. Ваши заявления об этих структурах, похоже, скопированы с рекламных объявлений. Они явно не являются результатом нейтральных объективных оценок этих инструментов. –

ответ

7

Главное руководство, которое я использую при создании структуры проекта, заключается в том, чтобы я мог добавить некоторые атрибуты contractcontract для уровня бизнес-логики, а затем разместить его как службу wcf.

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

Так моя обычная структура выглядит следующим образом:

Solution 
    Business.Contracts (interfaces for bll layer in here) 
    Business.Logic  (concrete implementations of contracts in here) 
    Business.Entities (Pocos that bll uses) 
    Data.Contracts  (interfaces for dal) 
    Data.Sql   (Concrete Sql implementation of contracts) 
    Common.Enums  (Enums needed by all projects) 
    FrontEnd   (Main mvc app) 

Таким образом, в этой структуре, мой проект MVC только когда-либо имеет дело с бизнес-пространством имен и общего пространства имен.

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

НТН

+0

Итак, ваш FrontEnd знает о вашем бизнесе. Контракты и ваши Business.Entities, ваш Business.Logic знает о ваших данных. Контракты и данные Data.Sql знают о ваших Business.Entities? Означает ли это точное описание муфты в вашем макете? Кроме того, какие преимущества дает вам эта структура? – littlecharva

+1

Да, в значительной степени, уровень бизнес-логики взаимодействует с уровнем данных. С этой структурой я могу изолировать передний конец от слоя данных, а это значит, что мне нужно разделить нагрузку на веб-сервер, я могу переместить уровень бизнес-логики за службу wcf и разместить ее на другом сервере. – Slicksim

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

  • Нет связанных вопросов^_^