Re: «Как вызвать базовый ORM, когда мне нужно создать новый объект»
Рассматривали ли вы идею AGGREGATE ROOT и шаблоны хранилища - они могут быть полезны.
Как грубое резюме:
AGGREGATE ROOT - это «сущность», имеющая глобально уникальный идентификатор в системе. В большинстве случаев это единственные объекты, которые ваше приложение должно захватывать «по идентификатору». Они обнаруживаются через хранилище, которое обычно инициализируется на знать о слоях данных при запуске приложения / начальной загрузке.
FACTORIES для AGGREGATE ROOT также обычно инициализируются на знать о слоях данных при запуске приложения / начальной загрузке.
В этом случае хранилище может оперировать процессом сбора данных для объекта любым удобным для него способом. REPOSITORY делегирует слой данных / маппер для получения необработанных данных и имеет тенденцию делегировать фактическую работу восстановления объекта FACTORY (класс / метод) для создания здания. Затем REPOSITORY возвращает вновь восстановленный объект AGGREGATE ROOT или of) клиенту, который вызвал метод поиска хранилища - то есть приложение. Хранилище является интерфейсом для извлечения и сохранения AGGREGATE ROOT и дает представление о том, как они хранятся в памяти.
Приложение может напрямую использовать FACTORY для создания нового объекта AGGREGATE ROOT.
Фабрика AGGREGATE ROOT обладает хорошими знаниями о слоях ORM / Mapper, и при создании совершенно новой сущности она может обратиться к услугам какого-то «объекта последовательности чисел», чтобы получить свой уникальный идентификатор.
AGGREGATE ROOT, как правило, являются единственными типами доменных объектов, которые вам нужно найти по глобально известному идентификатору, потому что любые другие доменные объекты:
- объекты одноразовой стоимости - как денежная стоимость, ИЛИ
- Объекты, зависящие от AGGREGATE ROOT. То есть объекты, имеющие идентификаторы, которые являются уникальными только в контексте AGGREGATE ROOT, что подразумевает, что
- AGGREGATE ROOT действительно должна быть единственной вещью, которая должна найти его / использовать - внутренне
- их можно найти с помощью ORM Mapper AGGREGATE ROOT
- их идентификаторы могут быть созданы AGGREGATE ROOT, который определяет его контекст / область действия
Дополнительная литература:
См. Проект, управляемый доменом, Эрик Эванс.
Совокупный корень:
http://books.google.co.uk/books?id=7dlaMs0SECsC&lpg=PP1&dq=domain%20driven%20design&pg=PA147#v=onepage&q=&f=false
Repositroies:
http://books.google.co.uk/books?id=7dlaMs0SECsC&lpg=PP1&dq=domain%20driven%20design&pg=PA147#v=onepage&q=&f=false