尽管这种问题被问了很多次,但我仍在努力理解存储库和工作单元模式之间的关系。本质上我仍然不明白哪个部分会保存/提交数据更改 - 存储库或工作单元?
由于我看到的每个示例都与将这些与数据库/或映射器结合使用有关,让我们做一个更有趣的示例 - 让数据以数据文件的形式保存到文件系统;根据模式,我应该能够做到这一点,因为数据的去向无关紧要。
所以对于一个基本实体:
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
实现,对于这种情况,它也将负责数据更改跟踪?对我来说,这表明存储库可以读取文件,而工作单元必须写入文件,但逻辑现在分为两个地方。