Сначала позвольте мне рассказать вам о проблеме, которую я пытаюсь решить.
У нас есть стороннее приложение, которое использует 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
документируют себя каждый месяц, внося изменения, которые мы сделали в предыдущей версии, в логику новых версий.
Я знаю, что эта система смешна, но я не могу изменить это сегодня. Любые идеи о том, как решить эту проблему, были бы великолепны. Я могу сказать вам, что я думал до сих пор ...
Десериализовать документы базовой и пользовательской старых версий, чтобы получить список конкретных различий, применить эти различия к десериализованной версии новой базы и применить к ней различия, а затем выполнить повторную сериализацию в xml.
Примените какой-либо процесс аннотации к пользовательским шаблонам, чтобы мы могли программно извлекать различия во время обновления.
Аутсорсинг процесса обновления ...