Il titolo è un'astrazione di ciò che sto effettivamente facendo, ma in sostanza è lo stesso.
L'entità principale con cui mi occuperò sono i Employee
s stessi; "Invia il pacco al dipendente John Doe". Per lavorare con un dato Employee
, ho bisogno di usare il IOffice
a cui appartengono, e ogni ufficio ha un modo diverso di consegnare quel pacchetto a quel Employee
. Non mi interessa veramente come il pacchetto viene consegnato, solo che arriva lì.
Nel primo modo menzionato nel titolo, sarebbe simile a questo:
public class Employee
{
private IOffice _office;
public Name { get; set; }
public void Send(Package package)
{
_office.Send(package, this)
}
}
public class SomeOffice : IOffice
{
public void Send(Package package, Employee employee)
{
// Implementation of how this office gets the package to employee
}
}
In questo modo, posso semplicemente avere un elenco di tutti i dipendenti e i dipendenti nello stesso ufficio possono condividere lo stesso oggetto IOffice
.
Il secondo approccio in questo modo:
public class Employee
{
public Name { get; set; }
}
public class SomeOffice : IOffice
{
public List<Employee> Employees { get; set; }
public void Send(Package package, Employee employee)
{
// Implementation of how this office gets the package to employee
}
}
Questo rende più difficile avere un'istanza di Employee
e inviare un pacchetto ad esso. Devi ottenere l'istanza desiderata da Employees
-collection e passarla nel metodo di invio dell'ufficio. Tuttavia, mantiene la classe Employee più semplice e fa in modo che IOffice si occupi di tutto.
Ci sono probabilmente anche altri modi per farlo. Come lo faresti?
Modifica :
Per esempio concreto, sostituisci IOffice
con CommunicationInterface
, ad esempio SerialPort
, UdpClient
, TcpClient
ecc.
Alla fine di ogni endpoint ci sono diversi Devices
( Employees
). Questi dispositivi si comportano tutti allo stesso modo, ma come inviarli una richiesta ( Package
) e ottenere una risposta diversa.
Dal mio programma, voglio avere un elenco di tutti i dispositivi disponibili, attraverso tutti i CommunicationInterfaces, e inviare richieste a loro, e ottenere risposte indietro.