Il titolo della domanda non è buono, ma non potevo pensare a un modo per esprimerlo meglio.
Sono abituato a sviluppare utilizzando le classi POCO nei miei progetti, ovvero, gli oggetti di dominio non contengono assolutamente logica, solo dati.
Mi chiedo quale sia l'approccio migliore quando si ha a che fare con le relazioni di classe - per mettere una raccolta all'interno della classe o per richiederla in seguito.
Ad esempio, considera di avere un'applicazione di e-commerce, che ha Ordini e Articoli all'interno di quegli Ordini. Quindi potremmo avere (pseudo-codice)
class Order
{
int id;
List<OrderItem> Items;
}
class OrderItem
{
Product product;
int quantity;
}
E poi usalo (1)
var o = LoadOrder(id);
foreach (var i in o.Items) {
... o potremmo fare:
class Order
{
int id;
}
E usalo in questo modo: (2)
var odr = LoadOrder(id);
var itms = LoadItemsOfOrder(odr);
foreach (var i in itms) {
.....
Il primo modo è più compatto e più "OOP-ish", ma il secondo modo dà più controllo su come e quando vengono richiesti gli elementi, ad es. cosa succede se ora ho bisogno di richiedere solo gli articoli che hanno quantità > 3? E se non utilizzo affatto la raccolta Articoli (ad es. Per visualizzare solo un elenco di ordini) - Farò query inutili al database.
Nei miei vecchi progetti più grandi ho seguito un approccio ibrido: le classi di dominio sono di primo livello, ma esistono vari metodi di "caricamento", come "LoadOrder" e "LoadOrderWithItems" o "FillOrderObject".
Ora sto lavorando a un piccolo progetto di giocattoli, nessun cliente e scadenze folli e ho avuto il tempo di riflettere su questi temi.
Ho provato a cercare sul Web ma è molto difficile trovare una risposta POCO non correlata a Entity Framework. (Non sto lavorando in .net questa volta, ma vorrei applicare questi concetti.)
Domanda : esiste un metodo che è chiaramente migliore rispetto all'altra, o entrambi sono validi e "dipende" dal mio progetto, se puntiamo al rendimento o per chiarezza del codice e manutenibilità?.