2009-04-24 20 views
9

Se si crea una classe di repository che incapsula tutta la logica di persistenza per una determinata entità, come PersonRepository, ma la classe del repository non implementa il modello Unit of Work o il pattern Mappa identità, è ancora considerato un repository? In altre parole, sono necessarie Unità di lavoro e Mappa di identità per un'implementazione di repository oppure possiamo semplicemente chiamare una classe che incapsula la nostra logica di persistenza come repository?Un archivio è ancora un archivio senza unità di lavoro?

Vorrei aggiungere una cosa. Se un repository non richiede questi pattern ed è in realtà solo un contenitore per i metodi di persistenza, qual è la differenza tra un repository e un DAO (Data Access Object)? Stiamo solo creando più nomi per lo stesso oggetto o ci manca una parte di ciò che dovrebbe essere un repository?

risposta

3

Sì, è ancora un repository.

Per quanto riguarda il repository == DAO, penso che il repository dovrebbe essere sul livello della logica aziendale e DAO dovrebbe essere sul livello di accesso ai dati, cioè penso che si trovino su livelli diversi. Quindi, come ho capito, Repository chiama i metodi DAO per caricare e mantenere i dati.

3

Direi che i modelli di Repository e Unit of Work sono ortogonali.

Molto frequentemente, voglio una singola unità di lavoro per estendere le operazioni su più repository, quindi un'implementazione di ciò dovrebbe appartenere a un livello superiore.

1

Basandosi su ciò che dice ha detto - mi sembra meglio per me se il repository e l'unità di lavoro non sono correlati. Separazione delle preoccupazioni?

1

Quando si prende in considerazione la separazione dei dubbi, ricordare che il repository disporrà dei metodi di implementazione dello storage dei dati, che consentono di mantenerlo fuori dal codice principale. Ciò è utile per il test delle unità e infine per sostituire completamente l'implementazione della memorizzazione dei dati (un esempio di implementazione di archiviazione dei dati sarebbe LINQ-to-SQL in ASP.NET).