Абстракция над различными каркасами OR Mapping

Уровень доступа к данным в моем продукте сегодня использует Hibernate в качестве среды сопоставления OR. В будущем мы хотели бы использовать другие платформы, такие как iBatis.

  1. Каков наилучший способ создания такого уровня абстракции поверх этих платформ OR OR?
  2. Есть ли такие рамки уже доступны?
  3. Я хочу спроектировать такую ​​систему, в которой с простыми изменениями конфигурации я смогу переключаться между этими платформами ИЛИ.

3 ответа

Я не думаю, что добавление абстракции поверх hibernate / ibatis имеет смысл. Это совершенно разные фреймворки - даже если вы в состоянии создать общий API-интерфейс - это исключит часть метаданных (от которой ваш код гораздо больше зависит). Вы должны серьезно задуматься о том, зачем вам это нужно и как это будет выглядеть. Люди уже жалуются на слишком много уровней абстракций - добавление большего только усложняет ситуацию.

Лучшим решением было бы изолировать большую часть логики вашего домена от зависимости от постоянства / транзакции / безопасности и т. Д. (Domain Driven Design). Таким образом, вы сможете сохранить важные части логики приложения, если вам придется изменить реализацию одного из них.

Посмотрите на данные Spring, они отличаются от того вида абстракции, который вы ищете.

Во-первых, я полностью согласен с ответом Xorty относительно фреймворков iBatis vs. Hibernate.

За исключением одного. Вы можете рассмотреть возможность переключения между iBatis, Hibernate. Я бы порекомендовал вам прочитать iBatis In Action книга, главы 10, 11. Здесь вы найдете пример конфигурации iBatis, которая позволяет вам конфигурировать / использовать iBatis и Hibernate с шаблоном DAO и его реализациями с помощью файлов карты iBatis sql, Hibernate и JDBC.

Проблема в том, что iBatis не является платформой ORM, а Hibernate. Цель iBatis - сопоставить конкретные операторы SQL с объектами, в то время как Hibernate пытается решить объектно-реляционное отображение (и несовпадение) более абстрактным способом.

Несколько лет назад поднабор основных функций Hibernate был стандартизирован для JPA. Имеет смысл делать вещи JPA-способом (чтобы вы могли сменить поставщика JPA - Hibernate, EclipseLink, ObjectDB).

Однако не имеет смысла строить какую-то абстракцию поверх разных подходов (например, Hibernate vs iBatis).

Другие вопросы по тегам