Il livello di servizio dovrebbe essere indipendente dall'implementazione del database?

0

Sto ricostruendo un'applicazione già esistente che ho costruito prima e vorrei implementare alcuni pattern nel modo migliore possibile.

Sto sperimentando due tipi di basi, in cui fondamentalmente ho gli stessi dati (ma una struttura diversa) in due database diversi: uno in MySQL e un MongoDB.

Ho repository per entrambi i driver di database, ognuno dei quali implementa un repository di base MySQL o un repository di base di MongoDB.

Ora sto cercando di capire se le classi di servizio del mio Service Layer dovrebbero essere a conoscenza dell'implementazione del database o meno?

  1. Se sono a conoscenza, ho bisogno di creare due classi di servizio per ogni repository di tabelle di database che sto implementando. La domanda è come io nel mio IoC posso facilmente passare da MySQL a MongoDB
  2. Se sono agnostici, allora ho solo bisogno di una classe di servizio. Il problema qui è che la classe di servizio ha bisogno di un TEntity perché ogni repository ha bisogno del proprio tipo di POCO per rappresentare una riga nella tabella / documento nella collezione.

Sto complicando le cose a molto? Come dovrei continuare Ho lottato per una settimana e sono davvero un po 'bloccato.

Classe di servizio (tentativo di renderlo indipendente dal database, purtroppo ha bisogno di TEntity perché sono diversi nei due diversi repository):

    public class AnimalService<TEntity> {
        where TEntity : new()
    {
        private readonly IAnimalRepository<TEntity> _animalRepository;


        public AnimalService(IAnimalRepository<TEntity> animalRepository)
        {
                _animalRepository = animalRepository;
        }

        ...
    }
    
posta silkfire 22.04.2017 - 14:11
fonte

0 risposte

Leggi altre domande sui tag