Я в процессе определения довольно простой многоуровневой архитектуры для приложения .NET MVC, который имеет уровень репозитория и уровень обслуживания. Я нашел некоторые довольно ясные и простые примеры, в частности www.asp.net, и некоторые вопросы и ответы здесь, но я ищу что-то, что немного проще, подходит для небольших приложений, но для разных целей используется разные проекты. В приведенном выше примере яв- ляется репозиторий и служба как классы в пространстве имен Models. Для меня просто недостаточно четкого разделения, чтобы я мог правильно его проиллюстрировать.ASP.NET MVC с уровнем сервиса и уровнем репозитория, где должны определяться интерфейсы?
У меня есть отдельный проект для репозитория, который реализует интерфейс IRepository. Существует отдельный проект для Сервиса, который реализует IService и принимает IRepository (инъекция конструктора). Служба реализует IService. Для этого примера достаточно, чтобы контроллер создавал экземпляр службы, но пока еще не нужен контейнер IoC. Подумайте об этом как о промежуточном шаге к пониманию лучших архитектурных практик, части последовательности, которая постепенно прогрессирует, чтобы включить инъекцию зависимостей и, возможно, больше слоев.
Вопрос в том, где я должен определить IRepository и IService? Разумеется, как для проектов служб, так и для репозитория. Понятно, что они должны быть определены в другом проекте, на который ссылаются как проекты службы, так и репозитории. Если да, то каково было бы хорошее соглашение об именовании? Что-то вроде XXXXContracts?
Аналогично, для моделей данных, прошедших между слоями представления, обслуживания и хранилища, приемлемо ли иметь отдельный проект под названием XXXXModels, на который ссылаются все слои? Я понимаю, что в некоторых случаях модели, передаваемые между уровнем сервиса и репозитория, могут отличаться от того, что передается между уровнем сервиса и уровнем представления, но принцип тот же.
Здесь я нашел ответы на подобные вопросы, но они имеют тенденцию включать более сложную архитектуру, чем то, что я здесь изложил. Я ищу, чтобы получить действительно простую и чистую иллюстрацию двух уровней, которые можно рассматривать как шаг или два выше, ссылаясь на уровень данных и имея бизнес-логику в контроллерах, вот и все. Я знаю, что есть сильный и веский аргумент в том, что он подходит к полной передовой практике, но не все подходят для того, чтобы сделать этот прыжок за один раз.
+1 для лука. Пример: http://ludwigstuyck.wordpress.com/2013/03/05/a-reference-architecture-part-1/ –
Хороший ответ. Как вы можете входить в свои контроллеры, если веб-слои ссылаются только на Core? Как насчет других помощников, которые являются кросс-проектами? Где вы их держите? – systempuntoout
Я удивлен, что у этого ответа больше нет бонусов. Очень хорошо написано и интересно! – sebbzzz