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?
- 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
- 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;
}
...
}