私のプロジェクトのすべてのコントローラー クラスは、適切に BaseController という名前の基本コントローラー クラスから派生しています。
すべてのビュー データは、BaseViewData という名前のクラスに含まれています (将来的には、より具体的なビュー データ クラスのベース コントローラーになる可能性があります)。
すべてのコントローラーが厳密に型指定されたベース ビュー データ内のデータにアクセスする必要があるため、BaseController に BaseViewData プロパティを作成しました (また、BaseController は BaseViewData プロパティの一部を事前設定するための作業を行います)。
私がこれを行った理由:
プロパティを変更した場合は、コンパイル時のエラー チェックを取得して、破損したコードをより迅速に解決します。
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...
}