Я занимаюсь определением довольно простой многоуровневой архитектуры для приложения .NET MVC с уровнем репозитория и уровнем обслуживания. Я нашел несколько довольно ясных и простых примеров, в частности www.asp.net, и некоторые вопросы и ответы здесь, но я ищу что-то, что немного проще, подходит для небольших приложений, но для разных целей используется разные проекты. В приведенном выше примере яв- ляется репозиторий и служба как классы в пространстве имен Models. Этого просто недостаточно для ясного разделения, чтобы я мог правильно проиллюстрировать его.
У меня есть отдельный проект для репозитория, который реализует интерфейс IRepository. Существует отдельный проект для Сервиса, который реализует IService и принимает IRepository (инъекция конструктора). Служба реализует IService. Для этого примера достаточно, чтобы контроллер создавал экземпляр службы, но пока еще не нужен контейнер IoC. Подумайте об этом как о промежуточном шаге к пониманию лучших архитектурных практик, части последовательности, которая постепенно прогрессирует, чтобы включить инъекцию зависимостей и, возможно, больше слоев.
Вопрос в том, где я должен определить IRepository и IService? Разумеется, как для проектов служб, так и для репозитория. Понятно, что они должны быть определены в другом проекте, на который ссылаются как проекты службы, так и репозитории. Если да, то каково было бы хорошее соглашение об именовании? Что-то вроде XXXXContracts?
Аналогично, для моделей данных, переданных между слоями представления, обслуживания и репозитория, приемлемо ли иметь отдельный проект под названием XXXXModels, на который ссылаются все слои? Я понимаю, что в некоторых случаях модели, передаваемые между уровнем сервиса и репозитория, могут отличаться от тех, которые передаются между уровнем сервиса и уровнем представления, но принцип тот же.
Я нашел ответы на подобные вопросы здесь, но они, как правило, включают более сложную архитектуру, чем то, что я здесь изложил. Я ищу, чтобы достичь действительно простой и чистой иллюстрации двух уровней, которые можно рассматривать как шаг или два выше, ссылаясь на уровень данных и имея бизнес-логику в контроллерах, и все. Я знаю, что есть сильный и веский аргумент в том, что он подходит к полной передовой практике, но не все подходят для того, чтобы сделать этот прыжок за один раз.