Sta cambiando il dominio in base al privilegio dell'utente su campi specifici considerati come anti-pattern?
Il mio caso:
Ho Schedule
Entità (radice aggregata) come questa:
public class Schedule : Entity<Guid>, IAggregateRoot
{
private Schedule()
: base(Provider.Sql.Create()) // required for EF
{
}
public Schedule(Guid id, string name, int workingSystemId, ScheduleType scheduleType) : base(id)
{
Name = name;
WorkingSystemId = workingSystemId ;
ScheduleType = scheduleType;
_assignedWeeks = new List<ScheduleDetail>();
_enrolledParties = new List<ScheduleEnrolment>();
MaxNumOfInstances = 300;
NumOfInstances = IsFixed ? 1 : 2;
}
private readonly List<ScheduleDetail> _assignedWeeks;
private readonly List<ScheduleEnrolment> _enrolledParties;
public string Name { get; set; }
public int WorkingSystemId { get; set; }
public ScheduleType ScheduleType { get; set; }
public int NumOfInstances { get; set; }
public int MaxNumOfInstances { get; }
public bool IsDefault { get; set; }
public bool IsFixed
{
get
{
return ScheduleType != null && ScheduleType.HasFlag(ScheduleType.Fixed);
}
}
public bool IsFlexible
{
get
{
return
ScheduleType != null && ScheduleType.HasFlag(ScheduleType.Flexible);
}
}
public bool IsFullTime
{
get
{
return
ScheduleType != null && ScheduleType.HasFlag(ScheduleType.FullTime);
}
}
public virtual IEnumerable<ScheduleDetail> AssignedWeeks { get => _assignedWeeks; }
public virtual IEnumerable<ScheduleEnrolment> EnrolledParties { get => _enrolledParties; }
public virtual WorkingSystem WorkingSystem{ get; set; }
}
Ora l'esperto di domini spiega che dobbiamo dargli la possibilità di impostare WeekStart
ad esempio (l'inizio settimana in questa pianificazione è: Sunday
) e NumberOfWeekends
per esempio (NumberOfWeekends in questa pianificazione è: %codice%). E questi due campi critici sono disponibili solo per impostare 2
. ma la creazione di pianificazioni è disponibile per il ruolo role A
e deve impostare questi campi durante la creazione della pianificazione!
Sta creando un'altra Entità e la chiamiamo A & B
considerata come una decisione sbagliata:
public class WorkingSystem : Entity<Guid>, IAggregateRoot
{
private WorkingGroup()//COMB
: base(Provider.Sql.Create()) // required for EF
{
}
public WorkingGroup(Guid id) : base(id)
{
_assignedWorkingTimes = new List<WorkingTime>();
}
private readonly ICollection<WorkingTime> _assignedWorkingTimes;
public string Name { get; private set; }
public byte NumberOfRotations { get; private set; }
public Week WeekStart { get; private set; }
public bool IsActive { get; private set; }
public bool IsDefault { get; private set; }
public byte NumberOfWeekends { get; private set; }
public virtual ICollection<WorkingTime> AssignedWorkingTimes { get => _assignedWorkingTimes; }
}
Ora la creazione di questa entità è disponibile solo per WorkingSystem
.
Come risolvere questo problema?