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 ответа
Я получил подобную структуру с некоторыми исключениями:
- Поддержка называется Инфраструктура (пространство имен только для использования сборки пользовательского интерфейса)
- IoC находится в другом проекте (проект для глобально используемой функциональности инфраструктуры). Пользовательский интерфейс имеет RegistryMaps Registry только с именами сборок (IoC инициализируется по соглашению). Подход украден из исходного кода CodeCampServer. Логирование, разделы конфигурации здесь тоже.
- Views / [ControllerName] имеет частичную подпапку, которая может быть еще более разделенной
(это включает в себя манипулирование с ViewEngine, чтобы он мог найти представления / частичные представления).- Views / [ControllerName] имеет папку LocalResources (с частичной подпапкой)
- Не добавлено ни одной подпапки в разделе "Контроллеры" (... пока). Мне нравится держать их в чистоте и довольно глупо.
И еще несколько исключений, связанных с Model:
- Вся бизнес-логика живет в доменной сборке, пространстве имен Domain.Model с некоторой помощью уровня инфраструктуры для технических аспектов.
- Модели представлений (я называю их 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 стремится наказать вас. немного, когда вы делаете это.:)
В более крупных проектах вы можете реализовать отдельный проект бизнес-класса и, возможно, даже проект по переводу данных и т. Д.