我在当前的项目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){};
}