使用存储库模式查询IoC

时间:2016-09-27 00:34:51

标签: c# mysql repository-pattern

我在当前的项目IRepository中使用了一个简单的存储库模式接口。最初,出于测试目的,我使用的实现是一个存储库,它将所有内容存储在List中。现在我想实现一个MySql存储库。

我最初的想法是创建一个通用的SqlRepository并升级IEntity接口以包含将返回从类实例构建的所需查询的Add / Update / Remove查询。这样我就可以通过调用TEntity构建查询方法从存储库中构建查询。这似乎是处理问题的一种优雅方式,除了处理ReadAll方法时,它没有参数,因此没有可以调用来创建查询的方法。我应该重新考虑我对这个问题的处理方法吗?或者以某种方式调整它以完成我想要做的事情?

有没有更好的方法来完成我正在做的事情?

interface IDataEntity
{
    Guid Guid { get; }
    MySql.Data.MySqlClient.MySqlCommand GetUpdateQuery();
    MySql.Data.MySqlClient.MySqlCommand GetRemoveQuery();
}

interface IRepository<T> 
{
    void Add(T item);
    void Remove(T item);
    void Update(T item);
    IEnumerable<T> ReadAll();
}

class MemoryRepository<T> : IRepository<T>
{
    List<T> _repository = new List<T>();

    public void Add(T item)
    {
        _repository.Add(item);
    }

    public IEnumerable<T> ReadAll()
    {
        return _repository.ToList();
    }

    public void Remove(T item)
    {
        _repository.Remove(item);
    }

    public void Update(T item)
    {
        return;
    }
}

class SqlRepository<T> : IRepository<T> where T : IDataEntity
{
    SqlHandler _sqlHandler;

    public SqlRepository(SqlHandler sqlHandler)
    {
        _sqlHandler = sqlHandler;
    }

    public void Add(T item)
    { 
         var query = item.GetUpdateQuery(); 
         //run query logic
    };

    public IEnumerable<T> ReadAll()
    {
         //no instance of T provided so no method to call to get ReadAllQuery. 
    };

    public void Remove(T item){};

    public void Update(T item){};
}

0 个答案:

没有答案