Преимущество состоит в том, что «что» (декларативная спецификация) отделено от «как» или от деталей реализации.Поэтому клиенту не нужно знать, запрашивает ли он реляционную базу данных, веб-службу, базу данных объектов (например, Mongo), хранилище данных XML и т. Д.
Предположим, вы используете СУБД.Несмотря на это, клиент изолирован от необходимости знать, является ли база данных Oracle, MS SQL, SQLite, mySQL, PostGres и т. Д. Это избавит вас от головной боли, когда запрограммирована «не используйте MS SQL» (или что-то еще) спускается с горы.
Дополнительный слой вносит некоторые накладные расходы.Но (1) инструменты ORM, такие как (N) Hibernate, достаточно хороши для оптимизации сгенерированных запросов для любой используемой серверной части, и (2) накладные расходы, как правило, незначительны по сравнению со стоимостью чтения базы данных, не говоря уже о сети.вызов службы.
Сейчас мы конвертируем из LINQ в NHibernate, чтобы избежать проблемы «N + 1» (т. е. вы генерируете один запрос / попадание для каждой «основной» записи базы данных плюс запрос / попадание длякаждая «детская» запись).И кстати ... есть такая вещь, как LINQ to NHibernate.