У меня есть коллекция объектов одного типа, назовем ее DataItem
. Пользователь может просматривать и редактировать эти элементы в редакторе. Также должна быть возможность сравнивать и объединять разные элементы, т. е. что-то вроде сравнения/слияния для DataItem
экземпляров.
Функциональность DIFF должна сравнивать все (соответствующие) свойства/поля элементов и обнаруживать возможные различия. Затем функция MERGE должна иметь возможность объединять два экземпляра, применяя выбранные различия к одному из элементов.
Например (псевдообъекты):
DataItem1 { DataItem2 {
Prop1 = 10 Prop1 = 10
Prop2 = 25 Prop2 = 13
Prop3 = 0 Prop3 = 5
Coll = { 7, 4, 8 } Coll = { 7, 4, 8, 12 }
} }
Теперь пользователю должен быть предоставлен список различий (т. е. Prop2
, Prop3
и Coll
), и он должен иметь возможность выбрать, какие различия он хочет устранить, присвоив значение одного элемента другому. Он также должен иметь возможность выбирать, хочет ли он присвоить значение от DataItem1
до DataItem2
или наоборот.
Существуют ли общепринятые методы реализации этой функции?
Поскольку тот же редактор должен также предоставлять функции отмены/возврата (используя шаблон команды), я думал о повторном использовании реализаций ICommand
, потому что оба сценария в основном обрабатывают назначения свойств, изменения коллекций и т. д. Моя идея состояла в том, чтобы создать Difference
объектов с ICommand
свойствами, которые можно использовать для выполнения операции слияния для этого конкретного Difference
.
Кстати: языком программирования будет C# с .NET 3.5SP1/4.0. Однако я думаю, что это больше вопрос, независимый от языка. Приветствуются любые дизайнерские шаблоны/идеи/что угодно!