Если у меня есть два класса [Shift,ShiftDetails]
, где [Shift]
- совокупный корень. на основе определенного поля я хочу ограничить количество экземпляров ShiftDetails
.
Я создаю класс ShiftDetailsView
, затем создаю два метода в Shift совокупный корень для управления инвариантом:
- public IEnumerable ConstructShift (); // на основе поля NumberOfSuccessions
Этот метод должен создать количество инициализированных ShiftDetailsView
на основе этого поля, а затем добавить их в список и вернуть результат пользователю (разработчику) как IEnumerable.
Затем пользователь должен вызвать CompleteShift
после заполнения первоначального IEnumerable, возвращенного из предыдущего метода:
- открытый список CompleteShift (IEnumerable shiftDetailsViews)
Я сделал два отдельных шага, чтобы контролировать количество потомков через совокупный корень, и я думаю, что есть лучшие способы сделать это, чтобы гарантировать (ACID) всего этого.
Исходя из комментариев, вопрос нуждается в дополнительном разъяснении, и, поскольку я пытаюсь упростить проблему, я допустил ошибку и изменил реальную проблему. потому что, когда мы решаем проблемы с доменом, мы должны быть точными и уточнить точную проблему. Поэтому я попытаюсь объяснить это более подробно.
У меня есть два следующих агрегата:
1. Первый агрегат
1-WorkingSystem: (совокупный корень)
private readonly ICollection<WorkingTime> _assignedWorkingTimes;
public string Name { get; private set; }
public short NumberOfSuccessions { get; private set; }
public Week WeekStart { get; private set; }
public bool IsActive { get; private set; }
public bool IsDefault { get; private set; }
public short NumberOfWeekends { get; private set; }
public virtual ICollection<WorkingTime> AssignedWorkingTimes { get => _assignedWorkingTimes; }
* * Пример тысячу сорок четыре: * * 1045
Id |Name | NumberOfSuccessions|WeekStart|IsActive|NumberOfWeekends
1 |Employees| 2 |Sunday | 1 | 2
2 |Lecturers| 1 |Saturday | 1 | 1
2-WorkingTime:
public string Name { get; set; }
public short NumberOfHours { get; set; }
public int WorkingSystemId { get; private set; }
Пример: * * тысяча пятьдесят-четырь
Id|Name | NumberOfWorkingHours | WorkingSystemId
1|Summer | 8 | 1
2|Winter | 6 | 1
3|General| 8 | 2
2. Второй агрегат
3-Shift (совокупный корень).
private readonly List<ShiftDetail> _assignedShiftDetails;
public string Name { get; set; }
public ShiftType ShiftType { get; set; }
public int WorkingSystemId { get; set; }
public virtual WorkingSystem WorkingSystem { get; set; }
public virtual IEnumerable<ShiftDetail> AssignedShiftDetails { get => _assignedShiftDetails; }
Пример: * * одна тысяча шестьдесят пять
Id|Name |ShiftType | WorkingSystemId
1 |restaurant-shift|Morning | 1
4- ShiftDetails:
public Guid ShiftId { get; private set; }
public int WorkingTimeId { get; set; }
public DateTimeRange ShiftTimeRange { get; set; }
public virtual WorkingTime WorkingTime { get; set; }
* +1073 * Пример: * 1 074 *
ShiftId = 1|WorkingTimeId = 1|ShiftStart = 8:00|ShiftEnd = 16:00
ShiftId = 1|WorkingTimeId = 2|ShiftStart = 9:00|ShiftEnd = 15:00
Теперь я хочу ограничить количество деталей на основе NumberOfSuccessions
для каждой рабочей системы! и поскольку у меня есть доступ к WorkingSystemId
в моем совокупном корне Shift
, я могу получить доступ к этой информации.
Не могли бы вы помочь мне контролировать количество экземпляров на основе поля в совокупном корне?