【发布时间】:2013-12-14 01:21:30
【问题描述】:
我有一个使用 EF6 获取一些数据的简单存储库。我也在使用 DI 框架来注入依赖项。
namespace Domain
{
public interface IMyRespository
{
List<MyObject> FetchObjects();
}
}
namespace Data
{
public class MyRepository : IMyRepository
{
private readonly MyDbContext _context;
public MyRepository(MyDbContext context)
{
_context = context;
}
public List<MyObjects> FetchObjects()
{
return _context.MyObjects.ToList();
}
}
}
一个新要求指出我需要记录每个 FetchObjects() 调用及其输出。我认为这将是应用装饰器模式的完美示例。
namespace Domain
{
public class MyRepositoryDecorator : IMyRepository
{
private readonly IMyRepository _inner;
private readonly ILogRepository _logRepository;
public MyRepositoryDecorator(IMyRepository inner, ILogRepository logRepository)
{
_inner = inner;
_logRepository = logRepository;
}
public List<MyObjects> FetchObjects()
{
var objects = _inner.FetchObjects();
var logObject = new LogObject(objects);
_logRepository.Insert(logObject);
_logRepository.Save();
return objects;
}
}
}
现在我正在寻找使用 UnitOfWork 模式,但我不确定在这种情况下如何实现。
据我了解,需要一些组件来管理 UnitOfWork。因此,在这种情况下,服务类将进行一些调用,并在最后调用 UnitOfWork 类上的 Save/Commit。
但是,如果存储库接口指示只读操作,则服务类没有理由将调用包装在 UnitOfWork 中并在最后调用 Save/Commit。它看起来也很奇怪。然而,装饰器需要这样做才能完成工作。
我可能在这里遗漏了一些基本结构。关于如何正确处理这种情况的任何想法?
【问题讨论】:
标签: c# dependency-injection repository repository-pattern unit-of-work