您可以使用每种数据访问技术来利用存储库。存储库是对现有数据访问助手/服务的抽象,允许将业务逻辑与数据访问层分离。与 Query 一起使用以启用过滤的存储库。它通常与工作单元一起使用,将更改存储回数据库。
一个存储库至少有:
- 按键获取对象操作
- 获取所有对象操作
- Get-first-object-by-query 操作
- Get-objects-by-query 操作
一个非常简单的例子:):
A.产品类别,在Common中定义:
public class Product
{
public int Id { get; private set; }
public string Code { get; set; }
public string Name { get; set; }
public decimal Price { get; set; }
}
B. Query、IRepository和IUnitOfWork的类在DAL.interfaces.dll或Common.dll中定义(但不在DAL中!)。
public class Query
{
public string Text { get; set; }
}
public interface IRepository<TEntity>
where TEntity : class
{
bool TryGet(int key, out TEntity value);
TEntity this[int key] { get; }
IEnumerable<TEntity> GetAll();
bool TryGetFirst(Query condition, out TEntity value);
TEntity GetFirst(Query condition);
IEnumerable<TEntity> GetAll(Query condition);
int Count { get; }
}
public interface IUnitOfWork
{
void SetAdded(TEntity value); // Marks entity as added for further INSERT
void SetRemoved(TEntity value); // Marks entity as removed for further DELETE
void SetChanged(TEntity value); // Marks entity as modified for further UPDATE
void Save(); // Save all the changes
}
IUnitOfWork知道更改的实体。Save()为每个更改的实体调用适当的 DatabaseHelper / OdbcHelper CRUD 方法,以便将更改保留在数据库中。
IRepository<Product>, ... IRepository<EntityXY>和IUnitOFWork的实现应该放在 DAL 中。BLL 然后使用IRepository和IUnitOFWork来实现业务(域)逻辑。BLL 本身可以组织为域模型之上的服务层,但它超出了讨论的范围:)。
我希望我的回答有帮助。
请随时问我一个问题...
链接:
Martin Fowler 的企业应用程序架构模式