2009-07-09 5 views
0

J'ai un site Web (ASP.NET MVC) que je voudrais étendre à un autre sujet similaire (comme stackoverflow-serverfault-superuser).Comment gérer plusieurs couches de vue (différentes)

La couche de base de données et la couche de contrôleurs sont les mêmes pour les deux sites Web. Ce qui diffère est juste les couches de vue, et seulement pour quelques détails: logos, masterpage et certains fichiers de ressources (en partie) et CSS.

Quelle est la meilleure façon de gérer cette situation? Comment cela est-il accompli par Jeff et son équipe?

Mon objectif idéal est d'avoir une solution unique (solution Visual Studio), un projet avec des contrôleurs et un modèle, et n projets différents: chacun pour chaque vue. (a ajouté cette ligne pour clarifier)

Je fais cela simplement en ramifiant les deux solutions (avec SVN ou Mercurial), puis en fusionnant lors de la publication?

Merci les gars!

Répondre

1

Nous utilisons le dossier App_GlobalResources pour ce faire

  • App_GlobalResources \ ServerFault.resx
  • App_GlobalResources \ StackOverflow.resx
  • App_GlobalResources \ MetaStackOverflow.resx

avec une classe d'aide:

public static class Resources 
{ 
public static string TeamEmail { get { return GetString("TeamEmail"); } }  
public static string GetString(string key) 
{ 
    return HttpContext.GetGlobalResourceObject(
     GlobalApplication.CurrentSite.ToString(), key).ToString(); 
} 
} 

et il apparaît dans la vue comme ceci:

<a href="mailto:<%= Resources.TeamEmail %>">contact us</a> 

Pour le remplacement plus au total (par exemple, le/faq), nous avons plusieurs copies du faq comme ceci:

  • Faq-ServerFault.aspx
  • Faq-StackOverflow.aspx
  • Faq-StackOverflowMeta.aspx

La construction renomme le fichier de manière appropriée pour chaque serveur.

(Notez que ce sont des vues de contenu, ils sont littéralement juste le faq contenu lui-même, la page principale détermine le reste de la mise en page)

0

Vous dites que vous avez un site Web et que vous souhaitez l'étendre à un autre sujet. Je pense que vous devriez penser est cette façon:

  • vous avez une application web qui fait votre travail.
  • vous avez un site sur lequel vous avez déployé cette application web
  • maintenant vous voulez une autre webapp avec les mêmes fonctionnalités (comme SO-SF), mais un aspect différent et se sentir
  • Je pense que votre tâche est tout simplement configurer votre application Web pour un aspect différent, et le déployer sur un serveur distinct

notes: * Ces deux sites seront indépendants les uns des autres. Ils n'auront pas de données en commun! * Si vous souhaitez que les sites Web interagissent, il est préférable de rendre l'application Web capable d'interagir avec d'autres instances de lui-même, puis de les redéployer. J'espère avoir compris ce que vous demandiez correctement, et que ce que j'ai écrit sera utile.

Cheers, HJR

+0

Oui cela pourrait avoir raison, mais de cette façon je dois reproduire presque vue entière (fichiers de ressources et de modèle), et cela ressemble à la duplication de code ... J'ai modifié la question originale, j'espère clarifier –

2

je peux penser à deux façons de le faire

  1. vous pourriez avoir des serveurs apache web ou IIS dans le cas où vos domaines sont différents et le magasin les css, logos et d'autres choses de l'interface utilisateur qui pourraient être stockées dans le serveur. Si vous utilisez .net que je suppose parce que vous parlez de la page maître et vos domaines ne sont pas différents, vous pouvez ajouter une certaine logique à votre application web pour passer d'un modèle à l'autre selon certaines règles comme le nom d'utilisateur ou le profil. Si vous utilisez .net, je pense que vous pouvez générer des skins différents et les affecter selon une certaine logique que vous devez implémenter. Si vous utilisez un langage différent, vous pouvez également générer un modèle et le changer selon vos règles.

Espérons que cela aide.

+0

Le problème avec votre deuxième point est que le code sera rempli de si-sinon que vous ne serez pas capable de lire et de le modifier après quelques mois .... Ce n'est pas une solution faisable –

+1

Je ne pense pas que vous ayez besoin de faire beaucoup de déclaration if-else, vous pouvez simplement ajouter une sorte de session variable vous indiquant le genre de templa puis utilisez-le comme pre/postfix pour vos css et logos i.e {$ templatename} -main.css, vous pouvez enregistrer cette variable templatename dans l'utilisateur pofile –