0

私のプロジェクトのすべてのコントローラー クラスは、適切に BaseController という名前の基本コントローラー クラスから派生しています。

すべてのビュー データは、BaseViewData という名前のクラスに含まれています (将来的には、より具体的なビュー データ クラスのベース コントローラーになる可能性があります)。

すべてのコントローラーが厳密に型指定されたベース ビュー データ内のデータにアクセスする必要があるため、BaseController に BaseViewData プロパティを作成しました (また、BaseController は BaseViewData プロパティの一部を事前設定するための作業を行います)。

私がこれを行った理由:

  1. プロパティを変更した場合は、コンパイル時のエラー チェックを取得して、破損したコードをより迅速に解決します。

  2. DRY を実践することで、以前は各コントローラーに散らばっていた ALOT のコードを統合することができました。

ただし、これを試みたのはこれが初めてです。そのため、醜い頭をもたげる準備をしている問題を見落としている可能性があります。そう:

BaseViewData クラスを BaseController クラスのプロパティにするのは悪い考えですか? もしそうなら、なぜですか?

更新 1:

私の BaseController は次のようになります (他にもありますが、これで要点がわかるはずです):

public class BaseController
{
  public string Language {get; set;}
  public string Locale {get; set;}
  public BaseViewData Data {get; set;}

  protected override void OnActionExecuting(ActionExecutingContext filterContext)
  {
    var l = (RouteData.Values["language"] != null) ? RouteData.Values["language"].ToString() : "en";
    if (l.ToLower().Contains("en"))
    {
      l = "en";
    }
    else
     l = "ja";

    Data.Language = l;
  }
}

私の BaseViewData は次のようになります (繰り返しますが、他にもあります...):

public class BaseViewData
{
  public string Language {get;set;}
  public string Locale {get;set;}
  public bool IsOwner {get;set;}
  public string Menu1 {get;set;}
  public string Menu2 {get;set;}
  public string Menu3 {get;set;}

  public IPagedList<TYPE> ListOfTYPE {get;set;}
  etc...
}
4

3 に答える 3

2

アイデアのメニュー コンポーネントは必要ないかもしれません。ASP.NET MVC 2 Beta では、Http.RenderAction を使用して、コントローラー アクションをビューから直接呼び出すことができます (リポジトリからメニュー項目を取得し、部分ビューを返します。

詳細については、Haackedをご覧ください...

さらに、言語/ロケールなどの単純なコンテンツの場合、ASP.NET プロファイル プロバイダー (コントローラーとビューの両方からアクセス可能) を使用する場合、これは必要ない場合があります。

于 2009-12-18T00:08:19.867 に答える
1

私が ASP.NET MVC で作業した唯一のサイトで、まさにそれを実行しました。これの良いところは、マスター ページで必要な BaseViewData クラスの値を保持できることです。すべてのビューには派生した BaseViewData のインスタンスが含まれていたため、Master Page で BaseViewData のデータを安全に使用できました。

于 2009-12-17T22:57:22.600 に答える
1

私見、あなたはモンスターを作成しています。

アプリが成長するにつれて、より多くの機能とグローバル画面がそのベース ビュー モデルに組み込まれます。MVC が回避しようとする .aspx.cs ファイルのようなコード ビハインド クラスになることは避けられません。

MVC パターンを少し壊すことを意味する場合でも、MVC2 の RenderAction や MVC Contrib の SubController などを使用することをお勧めします。

CNN や Stackoverflow.com などのサイトを見ると、気が付く前に 12 のメソッドが掲載されています。

于 2009-12-18T00:13:45.960 に答える