366 Часть 111. Шаблоны
понентами логичны и явно определены, мне часто бывает трудно составлять паке
ты, содержащие десятки компонентов с похожими названиями.
Ситуация сначала ухудшится, а затем - улучшится. Я уже вижу еще одно про
блемное направление в Data Mapper. Метод Mapper : : getCo l l e c t ion ( ) был удобным,
но, опять-таки, другим классам может понадобиться получить объект C o l l ection
для определенного типа приложения, не используя класс, обращенный к базе
данных. Итак. у нас есть два связанных абстрактных компонента: Collect ion и
Domai n Obj e c t Factory. В соответствии с объектом приложения, с которым мы рабо
таем, мы будем требовать другой набор конкретных реализаций, например Venue
C o l l e c t i o n и Venue Doma inOb j e ctFactory или SpaceCo l l ec t i o n и SpaceDoma i nObj ect
Fa ctory. Конечно, эта проблема приводит нас непосредственно к шаблону Abstract
Factory. На рис. 1 3.8 показан класс Pe r s i s tenceFactory. Я буду использовать его для
организации различных компонентов, из которых состоят несколько следующих
шаблонов .
Persiste nc eFactory
+getCollection(raw:array): Collection
+getDo8ainOЬjectFactory() : Do8ainO/ljectFactory
+getFactor�(t�eestr : string)
�
11
- SpacePersistenceFactory VenuePersistenceFactory
-
+getCollection(raw: array) : Collection +getCollection(raw: array ) : Collection
+getDomainObjectFactory( ) : DomainObjectFactory +getDomainObjectFactory( ) : DomainObjectFactory
1Dom ainObjectFactory
� _ _ _ _ _ :;:.. SpaceDomainObjectFactory 1
VenueDomainObjectFactory <- - - - - -11
Collection
1 1
1
:.э--L - - - - - - - - - - - SpaceCollection
VenueCollection <- - - - - - - - - - - - J
Рис. 1 3.8. Использование шаблона Abstract Factory для организации связанных компонентов
Шаблон ldentity Object
Реализация Mapp e r , которую я здесь представил, отличается недостаточной
гибкостью, когда речь идет о нахождении объектов приложения. Найти отдель
ный объект - это не проблема. Найти все подходящие объекты приложения так
же просто. Но если нужно сделать что-то среднее между этими задачами, то тре-