У нас есть большой граф объектов с множеством свойств и поведения в нем. В настоящее время мы пересматриваем наш домен и собираемся использовать подход DDD. Но мы нуждаемся в предложении ваших экспертов о том, как создать фабрики для нашей модели большого домена.
Проблема
Мы обслуживаем несколько регионов, таких как США, Канада, Испания, Чили, Бразилия, Великобритания и т. Д. Как видно, у каждого из них есть различия в адресах, именах ((фамилия, фамилия 1, фамилия 2 и т. Д.)), номера телефонов, национальные идентификаторы и т. д. На высоком уровне модель домена выглядит следующим образом
- Транзакция может иметь несколько
Тема
- субъект имеет имя,
Адрес, Телефонный Номер, Национальный Идентификатор
- Субъект может быть ConsumerSubject
или BusinessSubject
- ConsumerSubject имеет PersonName
в то время как BusinessSubject имеет
BusinessName
- Адрес может быть
USAddress, UKAddress,
Канадский адрес, Чили адрес и т. Д.
и так же может быть
география конкретных подклассов для
большинство доменных объектов (где
применимо)
Для каждого нового запроса нам нужно создать весь этот набор объектов, правильно заполненных в допустимом состоянии. Мы можем использовать шаблон «Абстрактная фабрика», чтобы иметь фабрики, специфичные для географии, такие как USTransactionFactory, CanadianTransactionFactory и т. Д.
Требуется предложение здесь
Как передать параметры для создания этих объектов. Взяв адрес в качестве примера
- Если у нас есть метод createXXXAddress (...) для
каждая география, которая берет в городе,
состояние и т.д. в качестве входных аргументов? This
означает, что нам нужно иметь
createUSAddress (...),
createCanadianAddress (...),
createChileanAddress (...) и т. д.
ИЛИ у нас должен быть только один метод createAddress (Address addr)
который просто берет объект Address и
пусть клиент создаст
соответствующая конкретная география
Адрес объекта? * 1035 например *
SpainAddress spain = новый SpainAddress ();
spain.setMuniciplaityName (...);
ИЛИ у нас должна быть отдельная AbstractFactory для каждого из значимых доменных объектов? Например, USAddressFactory, UKAddressFactory и т. Д.
Требуется предложение здесь
Есть ли необходимость в создании DTO для этого? Я имею в виду просто передать домен на уровень представления, но сохранить неизменность, обеспечив просмотр домена только для чтения. Например, каждый объект домена будет реализовывать два интерфейса: ReadOnlyAddress, MutableAddress. Это было вдохновлено тем, как йода-время.
Любые другие предложения и критика приветствуются.