私は多くの顔を持つ Web アプリケーションを持っており、これまでテーマを作成することでこれを実装してきました。テーマは、共通のバックエンドで使用される html、css、およびイメージのセットです。
物事は次のようにレイアウトされています:
code/
themes/theme1
themes/theme2
また、Web アプリケーションの各インスタンスには、使用するテーマを記述した構成ファイルがあります。例:
theme="theme1"
現在、新しいビジネス ルールにより、単に html/css/images を変更し、バックエンドを変更する必要があるだけでは達成できない特定のテーマを変更するよう求められています。場合によっては、これらの変更をテーマのグループに適用する必要があります。
これをディスクに最適に配置する方法と、コードで処理する方法を考えています。きっと他の誰かがこれに反対したに違いない。
1つのアイデアは次のとおりです。
code/common
code/theme1
code/theme2
themes/theme1
themes/theme2
次に、共通のコードで、最初に検索されるinclude_path
ものを設定し、次に.code/theme1
code/common
LogoutPage
次に、たとえば のクラスを特殊化したい場合は、ページを下の同じパスにtheme2
コピーするだけで、特殊化されたバージョンが取得されます。code/common
code/theme2
この考え方の問題点の 1 つは、同じ名前のクラスが複数存在することです。理論的には、それらが同じ実行に含まれることはありませんが、元の基本クラスを拡張することはできません。
では、基本クラスに一意の名前を付けたらどうなるでしょうか? 例えばTheme1LogoutPage extends LogoutPage
。私が予見できる問題の 1 つは、いくつかの一般的なコード (Dispatcher など) が を参照する場合LogoutPage
です。ディスパッチャーに条件を追加することはできますが、これを処理するためのより透過的な方法があるのだろうか?
私が考えることができる別のオプションは、テーマごとに別々のブランチを維持することですが、これは大変な作業になる可能性があると思います.
最後に考慮すべきことは、機能が 1 つのテーマに由来し、共通のコードベースにマージする必要がある場合があるということです。
任意の入力をいただければ幸いです。違いがあれば、それは LAMP 環境です。