Separazione della logica aziendale sul codice

6

Ho una tabella categoria e prodotto in database e classi sul progetto.

La classe di categoria ha proprietà {id, Name}
La classe del prodotto ha {id, Name, CategoryId} e altre relazioni.

E ho il repository e il livello di servizio.

Quindi, se devo ottenere prodotti di una categoria, dove posso inserire questa logica?

repository di categorie = > GetProductsInThisCategory ()

Archivio prodotti = > GetProductsByCategory (CategoryId)

Esiste una regola da separare come questa logica.

    
posta barteloma 08.11.2016 - 11:45
fonte

2 risposte

3

(Suppongo che GetProductsInThisCategory non sia inteso come metodo repo, ma metodo di categoria, correggimi se sbaglio).

Entrambe sono possibili e anche una soluzione in cui entrambe le cose sono contemporaneamente. Un Product probabilmente conoscerà la sua categoria, quindi GetProductsByCategory(CategoryId) avrà spesso senso, poiché Product dipende già da Category . L'introduzione di un metodo Category GetProductsInThisCategory() implicherà che Category dipenda anche da Product , quindi porta a una dipendenza ciclica (che è spesso accettabile, non necessariamente una soluzione errata, ma se ciò causa problemi nel tuo ambiente o architettura generale, evitalo).

Supponendo che la dipendenza ciclica non sia un problema, raccomando di implementare il metodo oi metodi che portano al codice più corto nei componenti che usano quei metodi. Se si intende implementare entrambi, poiché si prevede che il codice client possa utilizzare entrambi i metodi in modo significativo, implementarne uno in termini dell'altro metodo per evitare la logica duplicata, ad esempio:

 GetProductsInThisCategory()
 {
     return prodRepo.GetProductsByCategory(this.ID);
 }

Questo dà all'utente del tuo sistema un po 'più di "zucchero sintattico" senza aggiungere troppo codice aggiuntivo.

    
risposta data 08.11.2016 - 12:33
fonte
2

Potresti trovarti facilmente in una situazione in cui devi implementare sia in modo diverso che a diversi livelli. Un semplice esempio è GetProductsByCategory come metodo "tecnico" che restituisce una raccolta di prodotti con questo ID categoria, ma GetProductsInThisCategory come metodo "business" che applica inoltre l'ordinamento e il filtraggio.

Se il comportamento dei metodi è lo stesso - hai già una risposta da Doc.

    
risposta data 08.11.2016 - 12:55
fonte