Ho un oggetto MeetingRoom che contiene un elenco di Dipendenti, c'è una funzione su ogni dipendente chiamata SetMeetingDate, questo metodo deve prendere in considerazione lo stato di tutti gli altri dipendenti nella Sala riunioni, in particolare la proprietà IsReadyForMeeting.
Un singolo dipendente, ad esempio, può chiamare con successo SetMeetingDate (Date date) solo quando ogni dipendente nella ChatRoom ha impostato IsReadyForMeeting su true.
Ho pensato a un paio di modi per implementare questa funzionalità, posso fare qualcosa in cui il dipendente controlla lo stato degli altri dipendenti andando attraverso l'oggetto MeetingRoom come questo:
public void SetMeetingDate(DateTime date)
{
if (!MeetingRoom.AllEmployeesAreReady)
{
throw new ApplicationException("all employees are not ready");
}
MeetingDate = date;
}
che mi sembra avere la responsabilità nel posto sbagliato.
Un secondo approccio che posso usare è impostare un osservatore in modo che la classe Employee informi l'oggetto MeetingRoom che ha impostato una data di riunione e che la classe MeetingRoom solleverà l'eccezione se MeetingRoom.AllEmployeesAreReady è falso responsabilità per l'oggetto MeetingRoom e il codice per il dipendente sarebbe simile a questo:
public void SetMeetingDate(DateTime date)
{
MeetingDate = date;
Observer.MeetingDateAdded();
}
E la Sala riunioni avrebbe quindi un metodo come questo:
public void MeetingDateAdded()
{
if (!AllEmployeesAreReady)
{
throw new ApplicationException("all employees are not ready");
}
}
Questo uso dell'osservatore ha incontrato l'opposizione di altri sviluppatori nel mio team e posso capire perché, ma non riesco a pensare a un modo migliore per implementare il requisito, esiste un approccio facile / diverso che può essere utilizzato in questa situazione?