Я позапрошлом и прошлом моем проектах использовались ORM (Object Relational Mapping). И почему-то архитекторы приравнивали их к DAO. Тоесть слой сервисов напрямую дергали ORM слой, составляли критерии или HQL в случае hibernate. Таким образом осуществлялось взаимодействие с базой.
Полное дерьмо.
И вот почему. Что проще, замокать DAO или Hibernate? я про тестирование сервисов в изоляции.
Что проще, один класс DAO за другим переписать (смотри паттен branch by abstraction) под iBatis или еще проще под pure jdbc и наоборот или сидеть и искать все вызовы вашего текущего ORM слоя. И тем самым задерживать релиз из-за какой то внутренней переделки, на которую заказчику глубоко посрать, ведь ему реально посрать на то, что ты используешь для доступа к базе (CRUD).
И наконец, лучше содержать свой код так, как того требует базовые SOLID паттерны. Использование DAO слоя в данном случае подходит под практически все SOLID паттерны.
Мысль на закуcку. В чем разница между DAO и Repository паттернами? IMHO в том что к Repostory Эрик Эванс добавил ряд требований, таких как Repository может быть применен
к Root Donain Object, и все модификации с Childs могут происходит через Repository.
No comments:
Post a Comment