Я начал использовать принципы проектирования на основе домена, но в настоящее время застрял с конкретной проблемой.
У меня есть Агрегат, который имеет несколько слоев вложенных дочерних объектов, как показано ниже:
public class Aggregate: Entity<AggregateId>, IAggregateRoot {
private readonly List<ChildOne> childOnes;
}
public class ChildOne: Entity<ChildOneId> {
public string ChildOneValue1;
public string ChildOneValue2;
public string ChildOneValue3;
private readonly List<ChildTwo> childTwos;
}
public class ChildTwo: Entity<ChildTwoId> {
public string ChildTwoValue1;
public string ChildTwoValue2;
public string ChildTwoValue3;
}
В доменной службе мне нужен доступ ко всем значениям ChildOne
и ChildTwo
, включаяих идентификаторы.
public interface IDomainService {
public IEnumerable<INotification> Analyze(Aggregate aggregate);
}
Однако я не могу вернуть сущности такими, какие они есть, поскольку это нарушило бы принцип неизменности.
Это заставило меня задуматься о том, что моя модель предметной области, возможно, может быть неоптимальной,но я не вижу, как это может отличаться, поскольку вложенные объекты никогда не могут существовать без соответствующего родителя.
Другой подход может состоять в том, чтобы иметь один объект значения, который содержит все значения данного объекта, а затем возвращать этот объект значения вместо объекта. Но тогда необходимо выполнить глубокое сопоставление, так как доменная служба нуждается в доступе к значениям всех вложенных объектов.
Есть предложения о том, как к этому подойти?