Форум Сообщества Аналитиков

×


DDD - Repository pattern(Прочитано 11888 раз)
DDD - Repository pattern : 11 Ноября 2009, 13:47:35
Книга Мартина Фаулера - Patterns of Enterprise Application Architecture

Data Mapper - http://martinfowler.com/eaaCatalog/dataMapper.html
Metadata Mapping - http://martinfowler.com/eaaCatalog/metadataMapping.html
Query Object - http://martinfowler.com/eaaCatalog/queryObject.html
Unit Of Work - http://martinfowler.com/eaaCatalog/unitOfWork.html
Repository - http://martinfowler.com/eaaCatalog/repository.html
Strategy - http://en.wikipedia.org/wiki/Strategy_pattern

Есть реализация паттерна Data Mapper, основанном в свою очередь на паттерне Metadata Mapping, также есть Query Object в который можно добавлять множество критериев поиска.
Внутри себя Query Object инкапсулирует добавление выбранных объектов в Unit Of Work.

В книге Мартина Фаулера пишется что если разработчики реализовали Query Object, то можно легко перейти от Query Object к паттерну Repository. Один из плюсов Repository - это использования паттерна Strategy, что дает возможность использовать не только СУБД для получения объектов но и как пример XML файлы.

На мой взгляд в книге не полностью раскрыта тема паттерна Repository и остаются некоторые вопросы.

1. почему на диаграмме Repository видно что метод поиска может получать только один критерий?

2. какие методы кроме поиска должен иметь объект Repository?

3. критично или нет если Data Mapper будет иметь метод который в качестве параметра будет принимать Query Object?

В книге Query Object сам обращался к методу маппера findByWhereClause, при этом сам выполнял часть маппинга превращая запрос по полям объекта в Where выражение.

Я думаю что логично реализовать весь маппинг в классе маппера.

4. Хочется более точно понять как должны работать между собой все эти паттерны (Query Object, Repository, Strategy, Data Mapper, Metadata Mapping, Unit of Work)
« Последнее редактирование: 11 Ноября 2009, 15:23:02 от bas »



Re: DDD - Repository pattern Ответ #1 : 07 Января 2010, 21:29:25
Отвечу, возможно, запоздало, но всё же

Все приведённые паттерны, описанные Фаулером, неплохо работают вместе во многих современных инструментах ORM, например, Hibernate. Настоятельно рекомендую к ознакомлению хотя бы пару начальных глав руководства пользователя, чтобы представлять как эти концепции ложатся на практичный API.

В частности на уровне API:
* Data Mapper, Unit of Work, Repository -> Session
* Query Object -> Criteria/Query
* Metadata Mapping -> определения в *.hbm.xml или в аннотациях




 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19