Domanda

Durante la scorsa settimana o giù di lì ho letto un sacco di articoli e tutorial per quanto riguarda il modello di repository. Molti degli articoli strettamente legare il modello repository all'unità di modello di lavoro. In questi articoli, di solito trovo codice simile a questo:

interface IUnitOfWork<TEntity>
{
    void RegisterNew(TEntity entity);
    void RegisterDirty(TEntity entity);
    void RegisterDeleted(TEntity entity);

    void Commit();
    void Rollback();
}

interface IRepository<TKey, TEntity>
{
    TEntity FindById(TKey id);
    IEnumerable<TEntity> FindAll();

    void Add(TEntity entity);
    void Update(TEntity entity);
    void Delete(TEntity entity);
}

class Repository : IRepository<int, string>
{
    public Repository(IUnitOfWork<string> context)
    {
        this.context = context;
    }

    private IUnitOfWork<string> context;

    public void Add(string entity)
    {
        context.RegisterNew(entity);
    }

    public void Update(string entity)
    {
        context.RegisterDirty(entity);
    }

    public void Delete(string entity)
    {
        context.RegisterDeleted(entity);
    }

    /* Entity retrieval methods */
}

I Am comprendere correttamente che l'unità dell'oggetto lavoro ha lo scopo di gestire l'aggiunta, l'aggiornamento o la cancellazione di qualsiasi oggetto nell'archivio dati sottostante (nel mio caso, un servizio di directory, che comunico con via LDAP)? Se questo è vero, non dovrebbe gestire il recupero di tutti gli oggetti come bene? Perché è che non parte dell'interfaccia UoW suggerito?

È stato utile?

Soluzione

Un Repository è responsabile dei dati - ottenerlo, l'aggiornamento e le altre operazioni CRUD, fornendo la persistenza ignoranza.

A Unit Of Work (UOW), come dice Marin Fowler:

  

Mantiene un elenco di oggetti colpiti da una transazione commerciale e coordina la scrittura di modifiche e la risoluzione dei problemi di concorrenza.

L'UOW coordinerà più operazioni sugli oggetti -. Può o non può utilizzare repository per persistenti questi cambiamenti

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top