Во-первых, позвольте мне начать с подробного описания проблемы, которую я пытаюсь решить.
У нас есть стороннее приложение, которое использует Xml-документы для хранения всей своей бизнес-логики, поиска таблиц и т.п. Приложение имеет базовый набор Xml-файлов и использует своего рода модель наследования для предоставления унаследованных Xml-файлов, которые мы должны редактировать для настройки бизнес-логики. Я говорю «Вид из-за ужасной реализации наследования, которое он использует».
В настоящее время существует более 3000 отдельных файлов Xml размером от 1 до 5000 КБ и общим размером около 600 МБ. Единственное, что пока хорошо, это то, что все они используют один и тот же Xsd.
Наша проблема заключается в том, что мы получаем ежемесячные обновления основных файлов Xml, и мы должны установить их на место и обновить наши пользовательские документы, чтобы они соответствовали новой версии базовых документов. В настоящее время мы делаем это вручную, используя DiffDog, и собираем документы для создания новых, но я пытаюсь обдумать возможность сделать это программно. Позвольте мне посмотреть, могу ли я визуализировать это для вас:
Мы начинаем со структуры, подобной приведенной ниже, с базовым шаблоном и пользовательским шаблоном, в котором мы можем определить наши собственные правила (что мы часто делаем)
..\LineOfBusiness\BaseTemplates\BaseXml_1_0_0_0.xml
..\LineOfBusiness\CustomTemplates\Document_1_0_0_0.xml
Затем каждый месяц мы получаем обновление, поэтому теперь у нас есть такая структура:
..\LineOfBusiness\BaseTemplates\BaseXml_1_0_0_0.xml
..\LineOfBusiness\BaseTemplates\BaseXml_1_1_0_0.xml
..\LineOfBusiness\CustomTemplates\Document_1_0_0_0.xml
Наша задача, по сути, состоит в том, чтобы создать
..\LineOfBusiness\CustomTemplates\Document_1_1_0_0.xml
документируем себя каждый месяц, перенося изменения, которые мы сделали в предыдущей версии, в логику новых версий.
Я знаю, что эта система смехотворна, но я не могу изменить ее сегодня. Любые идеи о том, как решить эту проблему, были бы замечательными. Я могу сказать вам, о чем я думал до сих пор ...
Десериализуйте документы старой версии Base и Custom, чтобы получить список конкретных различий, примените эти различия к десериализованной версии новой версии Base и примените к ней различия, а затем выполните повторную сериализацию в xml.
Примените какой-либо процесс аннотации к пользовательским шаблонам, чтобы мы могли программно извлекать различия во время обновления.
Отдайте процесс обновления на аутсорсинг...