Я раньше программист Winforms; Я всегда разделяю программы, которые пишу, на две части: интерфейс (Winforms) и средний уровень (облегчается Remoting / WCF)
При таком подходе код переднего плана не может получить доступ к Linq или System.Data.SqlClient. Но у этого есть дополнительное преимущество в том, что промежуточный уровень является мгновенным гражданином SOA (сервис-ориентированная архитектура), может использоваться в сценариях B2B, независимо от базы данных и с поддержкой Интернета, даже если это просто приложение Winforms.
Сейчас я изучаю веб-навыки. Используя проект SportsStore из книги Pro ASP.NET MVC, неизбежно, что я бы сравнил свой старый (?) Подход (средний уровень) и подход к хранилищу в этой книге. Подход с хранилищем предоставляет механизм доступа к данным (Linq to SQL) непосредственно на внешнем интерфейсе (SportsStore.WubUI). Используя подход хранилища, SportsStore.WebUI по-прежнему имеет прямое соединение с базой данных.
Вопрос в веб-программах: стоит ли мне стремиться к тому, чтобы внешний интерфейс взаимодействовал только со средним уровнем (поэтому внешний интерфейс может быть независимым от базы данных, а средний уровень является гражданином SOA), или я должен использовать базу данных напрямую (с помощью подхода к хранилищу, ORM или подобного) на внешнем интерфейсе?