J'ai une application web qui a plusieurs visages et jusqu'ici j'ai implémenté cela en créant des thèmes. Un thème est un ensemble de html, css et images à utiliser avec le backend commun.Meilleures pratiques pour la gestion de plusieurs versions spécialisées d'une application
Les choses sont disposées comme ceci:
code/
themes/theme1
themes/theme2
Et chaque instance de l'application Web a un fichier de configuration qui indique que le thème devrait être utilisé. Exemple:
theme="theme1"
maintenant de nouvelles règles métier me demandent d'apporter des modifications à certains thèmes qui ne peuvent pas être atteints par le changement simplement les html/css/images et nécessitent de changer le back-end. Dans certains cas, ces changements doivent être appliqués à un groupe de thèmes.
Je me demande comment le mettre en page sur le disque et comment le gérer en code. Je suis sûr que quelqu'un d'autre a dû se battre contre ça.
Une idée est d'avoir:
code/common
code/theme1
code/theme2
themes/theme1
themes/theme2
alors que mon code commun mis la include_path
telle que code/theme1
est recherché, puis code/common
.
Alors si je veux me spécialiser dire la classe pour theme2
, je peux simplement LogoutPage
copier la page de code/common
au même chemin sous code/theme2
et il reprendra la version spécialisée.
Un problème avec cette idée est qu'il y aura plusieurs classes avec le même nom. Bien qu'en théorie ils ne seraient jamais inclus dans la même exécution, je ne serais pas capable d'étendre la classe de base d'origine.
Alors, que faire si je devais donner un nom unique à la classe de base? par exemple. Theme1LogoutPage extends LogoutPage
. Un problème que je peux prévoir avec cela est quand un code commun (disons le Dispatcher) référence LogoutPage
. Je peux ajouter des conditions au répartiteur, mais je me demande s'il y a une façon plus transparente de gérer cela?
Une autre option que je peux penser est de maintenir des branches séparées pour chaque thème, mais je pense que cela pourrait être beaucoup de travail. Une dernière chose à considérer est que les fonctionnalités peuvent provenir d'un thème et nécessitent ensuite de fusionner dans la base de code commune.
Toute contribution grandement appréciée. Si cela fait une différence, c'est un environnement LAMP.
Pourquoi voulez-vous downvote ma question? Il y a un million et un sondages sur ce type de dogfood que vous nourrissez votre chien. Ceci est une question de conception valide. Pourquoi ne pas simplement l'ignorer si cela ne s'applique pas à vous? –