我有一个有很多面孔的 Web 应用程序,到目前为止,我已经通过创建主题来实现它。主题是一组要与通用后端一起使用的 html、css 和图像。
事情是这样布置的:
code/
themes/theme1
themes/theme2
Web 应用程序的每个实例都有一个配置文件,说明应该使用哪个主题。例子:
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 环境。