Я изо всех сил пытаюсь понять отношения между репозиториями и модулями работы, несмотря на такой вопрос, который задают так много раз. По сути, я до сих пор не понимаю, какая часть будет сохранять/фиксировать изменения данных - репозиторий или блок работы?
Так как каждый пример, который я видел, связан с их использованием в сочетании с mapper/OR mapper, сделайте более интересный пример - сохраняйте данные в файловой системе в файлах данных; в соответствии с шаблонами я должен быть в состоянии сделать это, потому что, когда данные идут, не имеет значения.
Итак, для базового объекта:
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
, которая для этого сценария также будет отвечать за отслеживание изменений данных? Для меня это предполагает, что репозиторий может читать файлы, а блок работы должен записывать файлы, но теперь логика разделяется на два места.