我正在开发一个我需要编写数据访问层的应用程序。我的第一个想法是为我需要的每个实体创建一堆存储库,但我现在面临着分离存储库的不同操作的挑战。我想听听你对此的看法。
首先,我想支持两种类型的数据库通信 - 直接sql查询(例如,插入,更新等)和批量插入,如从文件(或其他源)加载数据。但是,这两种实现都做了不同的事情:
我对类结构的第一次尝试是:
public class Product{
}
public interface IProductRepository {
Product GetProduct(int id);
void CreateProduct(Product p);
}
public class SqlProductRepository : IProductRepository
{
public Product GetProduct(int id)
{
throw new NotImplementedException();
}
public void CreateProduct(Product p)
{
throw new NotImplementedException();
}
}
public class BulkLoadRepository : IProductRepository
{
public Product GetProduct(int id)
{
throw new NotImplementedException();
}
public void CreateProduct(Product p)
{
throw new NotImplementedException();
}
}
但是,此结构在批量存储库的末尾缺少同步功能。如果我最终添加了一个Sync()函数,我将需要将它留空以用于“简单”存储库。
有关如何支持这两种功能但仍将它们隐藏在一个界面后的任何想法?
提前致谢!
答案 0 :(得分:0)
首先,为什么要为每种对象类型创建一个接口。例如,存储库通常只有Get,Create,Update,Delete方法,也许是一个通用的Get ...其中IRepository也是通用的。
您可以拥有继承IRepository
的第二个接口,该接口具有Sync
方法,只有Bulk存储库实现该接口。在这种情况下,您仍然可以访问两个存储库methods defined by
IProductRepository`
或者有一个Bulk存储库的基类来实现/定义同步。
答案 1 :(得分:0)
我不确定为什么你会为简单的存储库留空。在我的大多数存储库中同步==提交。虽然更准确地说这是UnitOfWork模式,而不是存储库模式。
对于事务系统,公开单独的提交方法非常常见。