Копировать конструкторы в основной области - PullRequest
0 голосов
/ 28 февраля 2019

У меня есть доменные объекты, которые расширены классами на уровне инфраструктуры для инкапсуляции деталей реализации:

MyDomainEntity {
    List<SupportingDomain> children
}

SupportingDomain { ... }

SqlSupportingDomain extends SupportingDomain {
    Long version
}

У меня есть необходимость в глубоком копировании MyDomainEntity, что-то вроде этого:

public MyDomainEntity(MyDomainEntity other) {
    this.children = other.children.stream()
        .map(d -> (d instanceof SqlSupportingDomain) ? new SqlSupportingDomain((SqlSupportingDomain) d) : new SupportingDomain(d))
}

Конечно, при таком подходе информация об инфраструктуре просачивается в основной домен (проверка SqlSupportingDomain), что нежелательно.

Как кто-то может справиться с такой ситуацией?Возможно, есть лучший подход для разделения инфраструктуры и проблем домена?

1 Ответ

0 голосов
/ 03 марта 2019

Вы можете определить виртуальный метод copy () в классе SupportingDomain, который возвращает копию экземпляра, затем переопределить его в классе SqlSupportingDomain и вызвать этот метод в функции map.При этом вы будете инкапсулировать логику копирования в соответствующий класс и избежать приведения.

...