У меня есть веб-приложение с множеством граней, и до сих пор я реализовал это путем создания тем. Тема - это набор html, css и изображений для использования с общим бэкэндом.
Вещи выложены так:
code/
themes/theme1
themes/theme2
И каждый экземпляр веб-приложения имеет файл конфигурации, в котором указано, какую тему следует использовать. Пример:
theme="theme1"
Теперь новые бизнес-правила требуют от меня внесения изменений в определенные темы, которые не могут быть достигнуты путем простого изменения html / css / images и требуют изменения серверной части. В некоторых случаях эти изменения необходимо применить к группе тем.
Мне интересно, как лучше всего это выложить на диск, а также как справиться с этим в коде. Я уверен, что кто-то другой, должно быть, столкнулся с этим.
Одна идея состоит в том, чтобы иметь:
code/common
code/theme1
code/theme2
themes/theme1
themes/theme2
Затем мой общий код задает include_path
таким образом, что сначала ищется code/theme1
, затем code/common
.
Тогда, если я хочу специализироваться, скажем, класс LogoutPage
для theme2
, я могу просто скопировать страницу из code/common
по тому же пути под code/theme2
, и она выберет специализированную версию.
Одна из проблем этой идеи состоит в том, что будет несколько классов с одинаковыми именами. Хотя теоретически они никогда не будут включены в одно и то же исполнение, я не смог бы расширить исходный базовый класс.
Так что, если бы я должен был сделать уникальное имя для базового класса? например Theme1LogoutPage extends LogoutPage
. Одна проблема, которую я могу предвидеть, это когда какой-то общий код (скажем, Dispatcher) ссылается на LogoutPage
. Я могу добавить условия диспетчеру, но мне интересно, есть ли более прозрачный способ справиться с этим?
Другой вариант, который я могу придумать, - это поддерживать отдельные ветки для каждой темы, но я думаю, что это может быть много работы.
И последнее, что нужно учитывать, это то, что функции могут возникать в одной теме, а затем требовать объединения в общую кодовую базу.
Любой вклад с благодарностью. Если это имеет какое-то значение, это среда LAMP.