Questa è una semplice domanda, ma una considerazione progettuale che mi imbattete spesso nel mio lavoro di sviluppo quotidiano. Diciamo che hai una classe che rappresenta alcuni tipi di raccolta.
Public Class ModifiedCustomerOrders
Public Property Orders as List(Of ModifiedOrders)
End Class
All'interno di questo corso fai tutti i tipi di lavoro importante, come combinare molte diverse fonti di informazione e, alla fine, creare gli Ordini dei clienti modificati.
Ora, hai diversi processi che consumano questa classe, ognuno dei quali ha bisogno di una porzione leggermente diversa degli oggetti ModifiedCustomerOrders. Per abilitare ciò, si desidera aggiungere funzionalità di filtro. Come vai su questo? Ti:
-
Aggiungi il filtraggio delle chiamate alla classe ModifiedCustomerOrders per poter dire:
MyOrdersClass.RemoveCanceledOrders ()
-
Crea una classe di strumenti "Static / Shared" che ti consente di chiamare:
OrdersFilters.RemoveCanceledOrders (MyOrders)
-
Crea un metodo di estensione per ottenere lo stesso risultato del # 2 ma con meno digitando:
MyOrders.RemoveCanceledOrders ()
-
Crea un metodo di "Servizio" che gestisca l'acquisizione degli Ordini come appropriato per la funzione chiamante, mentre usi uno degli approcci precedenti "sotto il cofano".
OrdersService.GetOrdersForProcessA ()
-
Altro?
Tendo a preferire gli approcci al metodo degli strumenti / estensioni in quanto rendono il test un po 'più semplice. Sebbene io dipenda di iniettare tutti i miei dati di sourcing in ModifiedCustomerOrders, averlo come parte della classe rende un po 'più complicato da testare. In genere, scelgo di utilizzare i metodi di estensione in cui eseguo trasformazioni / filtri senza parametri. Man mano che diventano più complessi, lo sposterò invece in una classe statica.
Pensieri su questo approccio? Come ti avvicineresti?