Вот как мы разбили проект. Этот ASP.NET MVC довольно близок к запуску, и мы узнали несколько вещей на этом пути. Я привел причины, по которым каждый проект также является отдельным.
Project.Models - M в MVC, содержит все ваши бизнес-классы. Если вы можете управлять им (и вам действительно следует), здесь не должно быть классов, связанных с постоянством или веб-сервисами. Конечно, вы можете иметь интерфейсы для доступа к данным, определенные в этом проекте. Быстрый способ проверить, является ли этот проект «чистым» от доступа к данным, - это проверить, нужны ли в этом проекте ссылки на DLL-библиотеки доступа к данным, такие как NHibernate, или нет.
Причина: теоретически вы должны иметь возможность связывать этот проект и использовать эти классы где-либо еще, даже если вы переключаетесь на другой пользовательский интерфейс, например консоль и т. Д.
Project.Site - Этот проект содержит все ваши JavaScript, CSS, View и т. Д., Все, что связано с View.
Причина: если у вас есть дизайнер веб-сайтов, вы можете просто предоставить ему / ей доступ к этому проекту и заставить его поработать.
Project.Controllers - C в MVC, содержит все ваши контроллеры, а также ваши ModelBinder.
Причина: три разных проекта для Моделей, Представлений и Контроллеров затрудняют возникновение проблем.
Project.Tests -
Хранение всех ваших модульных тестов в отдельных проектах вынуждает вас тестировать только общедоступные интерфейсы; на мой взгляд, хорошая практика для юнит-тестов.
Projects.Services - Все веб-службы, код, связанный с постоянством, находятся здесь в этом проекте.
Пока что все классы Utility входят в Project.Models, но я думаю, что было бы намного лучше иметь отдельное решение для классов Utility и просто импортировать их как ссылки на скомпилированные сборки, где это необходимо.