У меня есть коллекция объектов одного типа, назовем это DataItem
. Пользователь может просматривать и редактировать эти элементы в редакторе. Также должна быть возможность сравнивать и объединять разные элементы, то есть, что-то вроде diff / merge для 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. Тем не менее, я думаю, что это больше не зависит от языка. Любой дизайн шаблон / идея / все, что можно только приветствовать!