Abbiamo i pronti contro termine nel DAL. La BLL fa riferimento ai repository tramite un'interfaccia - quindi i repository sono legati al DAL ma disaccoppiati dalla BLL. Non conosco alcuna ragione per cui i repository non potrebbero essere direttamente nella BLL. Li abbiamo nel DAL perché non mettiamo in loro alcuna logica. Abbiamo quindi "Manager" nella BLL che avvolgono i repository e gestiscono la logica specifica dell'entità.
FWIW abbiamo effettivamente un Repository(Of IEntity)
generico e utilizzare l'unità per istanziare il repository appropriato come richiesto: è molto compatto e abbastanza elegante. Tutte le nostre entità POCO implementano IEntity che contiene Id
, CreatedDate
, ecc. Che sono comuni a TUTTE le nostre entità. Questo dà alcuni altri benefici quando si ha bisogno di gestire qualsiasi tipo di entità genericamente - CreatedDate
è impostato dal repository quando CreateInstance()
si chiama, ModifiedDate
è impostato dal contesto stesso quando si impegna un'entità con uno stato di Modified
Manteniamo entità in un progetto separato - Il DAL deve essere in grado di farvi riferimento, così come il BLL. Non li vuoi nel DAL, in quanto lo scambio di DAL out causerebbe problemi. Non puoi metterli nella BLL o ottieni un riferimento circolare. La configurazione per le entità può essere inclusa nel DAL in quanto specifica per origine dati.
Cerchiamo di attenerci al BLL che acquisisce primitive e restituisce entità. Fai attenzione a tenere le entità nell'interfaccia utente troppo a lungo, soprattutto in un'app Web, poiché potresti avere un contesto diverso sotto il DAL quando restituisci l'entità alla BLL per l'elaborazione (ossia tra le richieste archiviate in sessione o simili). può risultare in tutti i tipi di divertimento attaccare/separare le entità dai contesti e perdere alcuni benefici come il rilevamento delle modifiche.
Speranza che aiuta, ma se volete qualsiasi chiarimento, fatemi sapere
Se una delle nostre risposte ha aiutato, contrassegnarlo come accettato – Basic