У меня есть иерархическая структура данных (она хранится в 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 или какой-либо уровень доступа к данным в иерархической структуре?
С уважением, Андерс