hej,
Chciałem spróbować na przykładzie prostej aplikacji stworzyć obiekty domenowe bliższe DDD niż jak zwykle zwykła lista właściwości z pustymi getami i setami.
Mam 3 klaski, Group, Person i Event. Protoptyp tych 3 klas wygląda następujaco:
public class Group: BaseEntity
{
private ISet<Person> _persons = new HashSet<Person>();
private ISet<Event> _events = new HashSet<Event>();
public string Name{ get; set; }
public IEnumerable<Event> Events => _events;
public IEnumerable<Person> Persons => _persons;
public void addPerson(string name)
{
_persons.Add(new Person(name));
}
public void addEvent(DateTime date, IEnumerable<int> ids)
{
var event= new Event(date);
_events.Add(event);
foreach (var id in ids)
{
var person = _persons.FirstOrDefault(p => p.Id == id);
person?.addToEvent(event);
}
}
}
public class Event: BaseEntity
{
public DateTime Date { get; set; }
public Group group{ get; set; }
public Event(DateTime date)
{
Date = date;
}
}
public class Person: BaseEntity
{
private ISet<Event> _events= new HashSet<Event>();
public IEnumerable<Event> Events => _events;
public Group Group{ get; set; }
public string Name { get; set; }
public Person(string name)
{
Name = name;
}
public void addToEvent(Event e)
{
_events.Add(e);
}
}
Wydarzenie jest przypisane do grupy i do osoby. Grupa i osoba mogą mieć wiele wydarzeń. Dodatkowo osoba jest przypisana do grupy.
Pytanie teraz jak zrobić, żeby z poziomu Person mieć dostęp do wszystkich jego wydarzeń? Normalnie utworzył bym tutaj klasę PersonEvent, bo jedna osoba może mieć wiele wydarzeń i jedno wydarzenie może być przypisane do wielu osób. Jak to w podejściu DDD rozwiązać?