В этих ответах и бесплатной вводной главе из Внедрение зависимостей в .NET рекомендуется отделить репозитории и пользовательский интерфейс от businesslogic. Зависимости должны сходиться с основной логикой так:
dal / repositories -> Businesslayer, Models и IRepository <- UI </p>
Мне также было интересно, где ViewModels вписываются в это. Определенно, они вообще не должны быть связаны с репозиториями, но вопрос о том, принадлежат ли ViewModel к бизнес-уровню (сервисному уровню) или с пользовательским интерфейсом, представляется спорным. Я просто смотрю на asp.net mvc и в настоящее время предпочитаю размещать их на уровне бизнеса, чтобы упростить работу контроллеров. Также кажется разумным, что бизнес-уровень собирает элементы из различных репозиториев, которые логически связаны друг с другом, и что они выполняются вместе через ViewModel. Может быть, как транзакция, чтобы обновления во всех хранилищах были успешными или откатывались.