Обычно приложения делят на три слоя:
- Data Access Layer
- Business Logic (Domain models)
- UI (Web).
BL независим, DAL зависит от BL, UI зависит от DAL и BL (ибо там располагается интерфейсы биндятся на реальные классы).
Если мы рассматриваем классическую схему доступа к данным через репозитории, то:
BL содержит: доменные модели, интерфейсы для репозиториев, сервисы (интерфейсы и реализации, которые работают с репозиториями).
DAL содержит: реализации интерфейсов репозиториев (из BL), т.е. работу с DB, DbContext (от EF) и прочую конкретику о том, откуда и каким образом извлекаются данные.
UI (для ASP.NET MVC) содержит: собственно веб-проект с котроллерами *Controller.cs (Controllers), вьюшками *.cshtml (Views), вью-модели *.cs (Models, те специфические модели, которыми типизируются вьюхи, они могут отличаться от доменных (маппиться с них в контроллере), например, содержать объект с данными пагинации).
Также UI сожержит корень внедрения зависимостей, где связываются между собой интерфейсы и их реализации, например, интерфейсы репозиториев из BL и реализации (заточенные на работу с БД) из DAL.
Пример реализации.
ЗЫ
Азы такой архитектуры применительно к ASP.NET MVC есть в замечательной книжке Фримана.