Вы должны реализовать форму наследования, так же, как наследование в объектно-ориентированных языков программирования или CSS, в котором вы начинаете с набором общих опций, а затем разрешить его переопределить другими опциями в более конкретных наборах.
Вы устанавливаете иерархию наборов параметров, начиная сверху, с параметрами, общими для всех пользователей, а затем наборы опций, которые вы определили как общие для многих типов пользователей, и, наконец, параметры, специфичные для пользователя. Это нужно представить в виде дерева в файле конфигурации XML, указав каждому набору параметров имя и родительский элемент. В нижней части дерева находятся наборы опций, названных в честь определенных типов пользователей (As, Bs и т. Д.).
В вашей программе необходимо прочитать этот файл и собрать дерево в памяти. Затем перемещайте его сверху вниз, собирая варианты и переопределяя их по ходу. Когда вы достигнете пользовательских параметров в листьях дерева и выполните последние переопределения, вы закончите.
Когда вы факторизуете свои параметры, вы можете обнаружить, что некоторые наборы должны иметь более одного родителя, поскольку они объединяют параметры из нескольких наборов. Если это так, ваше дерево становится DAG, и вам нужно топологически сортировать его перед тем, как вы пройдете его.
Я понимаю, что это сложное решение, но могу вас заверить, что это самый гибкий способ иметь дело с несколькими конфигурациями, которые имеют общие элементы. Я успешно его реализовал, чтобы настроить несколько веб-сайтов электронной коммерции, которые использовали один и тот же сервер.
Я вижу, что это работает для постепенного добавления/изменения параметров или подпараметров, но как бы удалить эту опцию по этому методу? –
@Robert, у вас может быть «не установленное» значение, на которое вы его установили, или на удаление другого тега, а не на установку параметра. –