複数の (異なる) ビュー レイヤーを管理する方法
-
12-09-2019 - |
質問
Web サイト (ASP.NET MVC) を持っており、これを別の同様のトピック (stackoverflow-serverfault-superuser など) に拡張したいと考えています。
データベース層とコントローラー層は両方の Web サイトで同じです。異なるのはビュー レイヤーのみであり、いくつかの詳細のみが異なります。ロゴ、マスターページ、およびいくつかのリソース ファイル (一部)、および CSS。
この状況に対処する最善の方法は何でしょうか?ジェフと彼のチームはこれをどのようにして達成したのでしょうか?
私の理想的な目標は、単一のソリューション (Visual Studio ソリューション)、コントローラーとモデルを含むプロジェクト、および n 個の異なるプロジェクトを持つことです。それぞれのビューごとに。(明確にするためにこの行を追加しました)
これは、2 つのソリューション (SVN または Mercurial を使用) を分岐して、公開中にマージするだけで済みますか?
みんなありがとう!
解決
私たちが使用するのは、 App_GlobalResources
これを行うためのフォルダー
- App_GlobalResources\ServerFault.resx
- App_GlobalResources\StackOverflow.resx
- App_GlobalResources\MetaStackOverflow.resx
ヘルパークラスを使用すると:
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();
}
}
ビューには次のように表示されます。
<a href="mailto:<%= Resources.TeamEmail %>">contact us</a>
さらに完全な置き換え (/faq など) については、次のような FAQ のコピーが複数用意されています。
Faq-ServerFault.aspx
Faq-StackOverflow.aspx
Faq-StackOverflowMeta.aspx
ビルドでは、サーバーごとにファイルの名前が適切に変更されます。
(これらはコンテンツ ビューであるため、文字通り単なる FAQ コンテンツそのものであり、残りのレイアウトはマスター ページによって決定されることに注意してください)
他のヒント
これを行うには2つの方法が考えられます
ドメインが異なる場合に備えて、Apache Web サーバーまたは IIS を使用し、CSS、ロゴ、その他の UI 要素をサーバーに保存する必要がある可能性があります。
.net を使用している場合は、マスター ページについて話しているのだと思いますが、ドメインに違いはありません。Web アプリにロジックを追加して、ユーザー名やプロファイルなどのルールに従って、あるテンプレートから別のテンプレートに切り替えることができます。.net を使用している場合は、さまざまなスキンを生成し、実装する必要がある特定のロジックに従ってそれらを割り当てることができると思います。別の言語を使用している場合は、テンプレートを生成し、ルールに従って切り替えることもできます。
お役に立てれば。
あなたは Web サイトを持っていて、それを別のトピックに拡張したいと考えています。これがファッションだと考えるべきだと思います。
- あなたが持っている ウェブアプリ それがあなたの仕事です。
- あなたはウェブサイトを持っています 配備された そのウェブアプリ
- ここで、同じ機能 (SO-SF と同様) を備えた別の Web アプリが必要ですが、見た目と操作感が異なります。
- あなたのタスクは、Web アプリを異なるように構成し、別のサーバーにデプロイすることだけだと思います
ノート:※この2つのサイトはそれぞれ独立したサイトとなります。共通のデータはありません。* Web サイトを相互作用させたい場合は、Web アプリをそれ自体の他のインスタンスと相互作用できるようにしてから、再デプロイすることをお勧めします。
あなたの質問の内容を正しく理解でき、私の書いた内容がお役に立てば幸いです。
乾杯、ジュニア