Pattern del repository con ORM multipli

0

Stiamo sviluppando l'applicazione con MVC e Repository Pattern. Attualmente stiamo usando EF come un ORM. Ma in seguito dobbiamo cambiare l'ORM in ibernazione. Qualsiasi idea sull'architettura.

Attualmente pianifico l'architettura come

  1. Contratti: Modello / Entità / Interfaccia repository / Interfaccia di servizio
  2. DataLayer (Contratti di riferimento) Implementazione del repository
  3. Livello di servizio (contratti di riferimento, DataLayer) Implementazione del servizio
  4. Web (Contratti di riferimento, ServiceLayer) Implementare l'iniezione di dipendenza (Unity)

Qui il DataLayer è strettamente accoppiato. Quindi ho bisogno di rompere e fare così

  1. Contratti: Modello / Interfaccia repository / Interfaccia di servizio
  2. DataLayer (Contratti di riferimento) Implementazione di Entità / Repository (che restituirà Modelli)
  3. Livello di servizio (contratti di riferimento, DataLayer) Implementazione del servizio
  4. Web (Contratti di riferimento, ServiceLayer) Implementare l'iniezione di dipendenza (Unity)

Se sopra funzionerà se cambiamo l'ORM, o avrà un impatto maggiore.

    
posta Ram kumar 04.11.2016 - 14:24
fonte

2 risposte

3

Se fossi il tuo capo, non ti permetterei di inventare un'architettura che permetta di scambiare l'ORM. Prenderò un ORM e vivrò con esso perché spegnerlo sarebbe troppo lavoro e costerebbe tempo e denaro con pochissimi benefici.

In questo caso, utilizzerei l'ORM che soddisfa i tuoi requisiti, che in questo caso in base a quanto è stato affermato è ibernato. Se hai già investito tempo e sforzi in Entity Framework ed è troppo tardi per invertire la rotta, allora scriverei un'implementazione personalizzata per gestire il caso di grandi quantità di dati e continuare ad utilizzare Entity Framework per gestire la maggior parte degli scenari di accesso ai dati.

    
risposta data 04.11.2016 - 15:32
fonte
0

Crea il PoC più semplice che puoi con, ad esempio, una mezza dozzina di oggetti dominio, un solo repository e un livello di servizio, con POCO rigorosi (prima il codice con EF), senza attributi specifici specifici EF. Lo stesso con NHibernate.

Assicurati di avere una relazione many-to-one e many-to-many da qualche parte.

Quindi, osserva quanto è difficile non discostarsi da quei POCO senza dover fare affidamento su specifiche EF o NHibernate per implementare la stessa semantica di caricamento avida o pigra, per qualsiasi caso di utilizzo del consumo nel livello di servizio in entrambi gli ORM.

Non imbrogliare. Scrivi gli stessi test unitari contro ciascuno per avere, se non una prova formale, almeno una prova maggiore se il codice si comporta allo stesso modo in entrambe le versioni.

Prendi nota di ogni punto in cui devi riscrivere su NHibernate personalizzato, questo o EF personalizzato, in modo che gli stessi test unitari diano le stesse risposte (tutte le altre considerazioni sono uguali).

Cerca di riconoscere tutti gli schemi che sono emersi, e fai in modo che EF POCO e repo si discostino dalle loro controparti NHibernate, o viceversa, e inizi a pensare a quei modelli in termini del modello sorgente che un codice (ipotetico) generatore da X-a-EF + X-to-NHib si nutrirebbe.

Da allora, dovresti avere un'idea migliore di ciò che la tua domanda in realtà implica wrt. qualche ipotetico sforzo futuro in quella direzione.

    
risposta data 05.11.2016 - 09:24
fonte

Leggi altre domande sui tag