Структура проекта MVC5: Не знаете, как это должно произойти

Я собираюсь создать новое веб-приложение ASP.NET с использованием MVC5 w/Telerik Kendo UI, и я хочу, чтобы он был правильно структурирован. Я нашел этот пробный проект Telerik на GitHub, но структура меня смущает. Есть 3 слоя: Уровень клиента Уровень ядра Уровень данных

Я не понимаю, почему на уровне данных есть папка репозиториев, а затем другая папка репозитория со всеми связанными интерфейсами на уровне ядра. Не должно ли быть связано какое-либо хранилище в слое данных? И что-нибудь связанное с бизнес-логикой должно быть в основном слое?

Я также использую EF6 DBFirst с файлом.edmx в моем слое данных, так что я все еще хочу, чтобы папка репозиториев была моей, как структурирован образец проекта?

Моя общая цель - сделать что-то похожее на то, что они здесь делают, но с EF6 Db First. Я все еще хочу подобные слои, и я хочу закончить использование ViewModels и Dependency Injection для передачи данных в мои представления.

Я несколько недель пробовал придумать хорошую структуру проекта MVC5 EF6 DBFirst Ninject (для IoC) с уровнем данных, уровнем бизнес-логики и слоем пользовательского интерфейса. Есть ли хорошие примеры или кто-то может объяснить, как это сделать?

1 ответ

Ну, что я делаю, это создать три проекта для архитектуры N-уровня, а еще один - Common:

  1. Веб-проект MVC

    Представления работают как обычный проект MVC. Каждый контроллер имеет конструктор с параметрами бизнес-провайдера, переданный с использованием Ninject.

  2. Проект BusinessProviders

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

  3. Уровень данных (DAL)

    Этот проект содержит файл edmx. а также классы, которые взаимодействуют с объектами.

  4. общий

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

Таким образом, в основном мой поток данных через приложение:

View → Controller → BusinessProvider → Класс доступа к данным → Объекты (база данных)

View <- Controller <- BusinessProvider <- Класс доступа к данным <- Объекты (база данных)

Причина, по которой я использую этот подход, заключается в том, что я нахожу его более чистым для написания кода и его повторного использования. Также это помогает в IoC (в моем случае Ninject).

Я написал простую запись в блоге об этом здесь (я напишу еще одно сообщение в блоге для интеграции Ninject в ближайшие несколько дней): http://myseesharp.blogspot.co.uk/

EDIT: ссылки на Ninject с N-Tier:

http://myseesharp.blogspot.co.uk/2015/01/ninject-with-n-tier-mvc-application.html

http://myseesharp.blogspot.co.uk/2015/01/ninject-with-n-tier-mvc-application_1.html

licensed under cc by-sa 3.0 with attribution.