ASP.net MVC структура проекта

Я создал следующую структуру проекта для моего нового проекта asp.net mvc, какой бы я ни был после некоторой обратной связи о том, как другие люди структурируют свои проекты, и если бы я улучшил мой...

Вот что у меня так далеко:

+Assets
-+Images 
-+Scripts 
-+Stylesheets 
-+...              'More things like the above here
+Controllers 
-+Support
--+Actions         'Any custom action classes
--+Controllers     'Base controller classes
+Models
-+Domain           'Contains any class that specialise view specific domain logic
--+UrlProcessing   'Encoding/decoding business entities as URL parts 
--+...             'More things like the above here
-+Views            'Contains view models
--+Support
---+Views          'Base classes for any view models
+Support
-+Application      'Global application interface classes (i.e. class that wraps the function of the global asax)
-+Configuration    'Typed config classes
-+Helpers          'Where you put additional html helper classes, etc
-+Services
--+Bootstrap       'Tasks that run on mvc start-up that are specific to the MVC project
--+Inversion       'Specific IoC registration registrations for this project 
--+...             'More things like the above here
+Views
-+Home
-+Shared 
-+...              'More things like the above here

Ура Энтони

4 ответа

Решение

Я получил подобную структуру с некоторыми исключениями:

  1. Поддержка называется Инфраструктура (пространство имен только для использования сборки пользовательского интерфейса)
  2. IoC находится в другом проекте (проект для глобально используемой функциональности инфраструктуры). Пользовательский интерфейс имеет RegistryMaps Registry только с именами сборок (IoC инициализируется по соглашению). Подход украден из исходного кода CodeCampServer. Логирование, разделы конфигурации здесь тоже.
  3. Views / [ControllerName] имеет частичную подпапку, которая может быть еще более разделенной
    (это включает в себя манипулирование с ViewEngine, чтобы он мог найти представления / частичные представления).
  4. Views / [ControllerName] имеет папку LocalResources (с частичной подпапкой)
  5. Не добавлено ни одной подпапки в разделе "Контроллеры" (... пока). Мне нравится держать их в чистоте и довольно глупо.

И еще несколько исключений, связанных с Model:

  1. Вся бизнес-логика живет в доменной сборке, пространстве имен Domain.Model с некоторой помощью уровня инфраструктуры для технических аспектов.
  2. Модели представлений (я называю их ViewData) живут в сборке пользовательского интерфейса в папке ViewData, структурированной в папки, подобные представлениям. Выбранный подход от Kigg (за исключением того, что я структурирую их по View, как SearchViewData, иногда даже по частичному представлению).

Пока работает достаточно хорошо

Обратите внимание, что структурирование ViewData (я даже структурирую свой javascript таким же образом, View==JS-файл, который содержит все в объекте с именем [ViewName]) для представления может быть неприемлемым для более сложных веб-сайтов.

Ох... и => папка == пространство имен для меня. Я думаю, это хорошая практика.

Сайт MVC
приложение - все статические файлы
--common
---- CSS
------ стили-самая-страница-use.css
---- ГИМ
------ образами-самая-страница-use.png
---- JS
------ ваш-таможенно-lib.js
--files
----release_notes.md
---- release_notes.html
--pages
----войти в систему
------ signin.css
------ logo.png
------ signin.js
----приборная доска
------ dashboard.js
--vendors
---- JQuery
------ jquery.1.11.1.js
-_references.js

Контроллеры - только тонкие контроллеры, просто код для вызова основных функций библиотеки
Модели - только модели, которые используются для отображения вида
Представления - только клиентский код, такой как html, razor, css и т. Д.

Основная библиотека
В основном весь код... доступ к данным, пользовательские атрибуты, утилиты и т. Д. Разделение основного кода на библиотеку удобно по многим причинам. Ваша логика не привязана только к веб-сайту. Если мне нужно, я могу создать быстрый интерфейс в WinForms для проверки некоторой логики, или я мог бы использовать те же функции на вашем уровне доступа к данным для создания интерфейса администратора для базы данных.

Я считаю эту структуру наиболее простой и гибкой для меня.

Обновить
Я обновил структуру файлов статического контента, чтобы она стала более гибкой и современной. Я придумал эту структуру при работе с AngularJS. В конце концов я перешел на RactiveJS. После перехода на RactiveJS та же структура сработала очень хорошо.

Обновление 8-21-15 В последнее время я работал над более крупными проектами и отделял библиотеку Core от собственного проекта Visual Studio. Это делает его гибким при использовании SVN Externals. Я могу использовать одну и ту же библиотеку в разных проектах, и мне нужно только выполнить обновление SVN, чтобы получить изменения. Также вспыхнул сайт MVC в своем собственном проекте тоже.

Я думаю, что это немного сложнее, но если это имеет смысл, то иди с этим. Важно сохранить равновесие.

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

Я написал пару (маленьких) сайтов и просто придерживался той же структуры, что и NerdDinner, и, похоже, он работал нормально.

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

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

Другие вопросы по тегам