Sto lavorando per progettare una soluzione a livello aziendale e una domanda su come gestire al meglio i dettagli di persistenza.
La mia configurazione generale è che esiste un set di base di business logic / oggetti, oltre a un numero di componenti isolati che si basano sulla logica di base, ma mai su altri componenti. Sedersi sopra questo componente / core business logic è una logica applicativa e roba di presentazione. Sotto questi due livelli c'è l'infrastruttura e la persistenza.
nota:attualmentestolavorandoalcoreinmodospecifico,nonhoancoraottenutocomponentiin
Implementazionepersistenzacorrente:
Attualmente(enoncorrettamente,sospetto),ilmioprogettoCorehaunriferimentoalprogettoPersistenzaeunmodelloCore(Ordini,diciamo)hauncampoIOrderRepository.Quandol'ordinevieneistanziato,possorecuperareleinformazioni,possosalvarle,ecc.
Lamiapreoccupazioneattuale:
1)ImieioggettideldominioprincipalenonstannoseguendoSRPperchéessenzialmentehannodeidettaglidipersistenzaadessicollegati(nonostantetalidettaglisianodettaglidell'interfacciainvecedeidettaglidiimplementazione,èancoralì).
2)LeggendounbuonarticolosullagestionediDbContextdiEF(chepuòessereconsideratoinuncontestodicontestopiùgenericodiEFinparticolare)(ref:
Cosa sembra meglio:
"Mi sembra" meglio che il contesto di persistenza (e quindi DbContext e quindi i repository) debba essere gestito nel contesto generale di qualsiasi attività aziendale specifica piuttosto che semplicemente su un oggetto business, che, di per sé, ha nessun contesto vero nonostante incapsulino vari comportamenti (questa affermazione è corretta ??).
Considerando che un contesto di persistenza / dbContext può essere essenzialmente considerato una transazione, sembra quindi più corretto, in senso lato, che tale contesto di persistenza debba essere incluso dove iniziano queste azioni di guida, poiché questo è il contesto in cui essenzialmente operare.
Quello che non riesco a capire:
Come faccio a impostarlo in modo che il contesto di persistenza sia più vicino al contesto in cui è usato (che sembra giusto, ma correggimi se ho torto), mentre allo stesso tempo lo separo completamente dagli oggetti del dominio questi ultimi mantengono il loro SRP richiesto (ad es., quindi non ho metodi Save () e Load () sugli oggetti del dominio, non importa quanto siano lontani da loro)?
Apprezzo qualsiasi suggerimento su come evitare che si trasformi in un caos confuso. Grazie