Шаблон репозитория с иерархической структурой данных - PullRequest
2 голосов
/ 17 февраля 2012

У меня есть иерархическая структура данных (она хранится в XML-файле), и я хочу инкапсулировать слой данных в некоторый интерфейс для доступа к данным из бизнес-уровня.

Кажется, что шаблон репозитория с единицей работы может быть хорошим способом инкапсуляции модели данных, но я не могу понять, как это сделать ..:

Мои данные сгруппированы следующим образом

  • TestPlan
    • Список тестовых последовательностей
      • TestMethod
      • GroupReference
      • TestMethod и т. Д.
    • Список методов GroupsOfTest
      • Группа
        • Список методов испытаний
          • TestMethod
          • GroupReference
          • TestMethod
      • Группа и т. Д.

Я попробовал несколько подходов, но кажется, что паттерн Repository / UoW лучше подходит для отображения плоских таблиц, а не для иерархической структуры.

Например, сделать

interface IRepository<T>
{
    void Add(T entity);
    void Remove(T entity); 
    T GetByName(string name);
    IEnumerable<T> GetAll();
}

А потом

interface IUnitOfWork
{
    IRepository<Group> GroupsOfTestmethods { get; }
    IRepository<groupitembase> TestSequence { get; } // groupitembase is base class for TestMethod and GroupReference
    void Save();
}

Теперь, если я хочу использовать TestMethod, я должен обойти как список TestSequence, так и все группы в GroupsOfTestmethods, чтобы обязательно его найти. Однако было бы неплохо иметь общую функцию для получения элемента TestMethod независимо от того, в каком списке он находится ..

Есть предложения о том, как построить реализацию Repository / UoW или какой-либо уровень доступа к данным в иерархической структуре?

С уважением, Андерс

...