【发布时间】:2012-12-25 03:49:56
【问题描述】:
尽管这种问题被问了很多次,但我仍在努力理解存储库和工作单元模式之间的关系。基本上我仍然不明白哪个部分会保存/提交数据更改 - 存储库或工作单元?
由于我看到的每个示例都与将这些与数据库/OR 映射器结合使用有关,让我们做一个更有趣的示例 - 让数据以数据文件的形式保存到文件系统;根据模式,我应该能够做到这一点,因为数据的去向无关紧要。
所以对于一个基本实体:
public class Account
{
public int Id { get; set; }
public string Name { get; set; }
}
我想会使用以下接口:
public interface IAccountRepository
{
Account Get(int id);
void Add(Account account);
void Update(Account account);
void Remove(Account account);
}
public interface IUnitOfWork
{
void Save();
}
我认为就使用而言,它看起来像这样:
IUnitOfWork unitOfWork = // Create concrete implementation here
IAccountRepository repository = // Create concrete implementation here
// Add a new account
Account account = new Account() { Name = "Test" };
repository.Add(account);
// Commit changes
unitOfWork.Save();
考虑到所有数据都将保存到文件中,实际添加/更新/删除这些数据的逻辑在哪里?
- 它是否通过
Add()、Update()和Remove()方法进入存储库?对我来说,将所有读取/写入文件的代码放在一个地方听起来很合乎逻辑,但是IUnitOfWork接口的意义何在? - 它是否包含在
IUnitOfWork实现中,对于这种情况,它也将负责数据更改跟踪?对我来说,这表明存储库可以读取文件,而工作单元必须写入文件,但逻辑现在分为两个地方。
【问题讨论】:
标签: c# repository-pattern unit-of-work