3

MVC アプリケーションがあります。次のコードは、コントローラー内の複数の場所と複数のコントローラーで使用されています。このコードを 1 か所にまとめて、各場所から呼び出したいと思います。MVCでそれを行う最良の方法は何ですか?

以下のコードは、データベースから行を取得し、ビューから読み取ることができる ViewData を作成します。Web フォームでは、クラス内に public サブを作成し、年と月の値を渡します。このコードをモデルの一部にする方法はありますか?

var monthlyexpenseincome = (from vu_monthlyresult in dbBudget.vu_MonthlyResults
                            where vu_monthlyresult.Month == defaultmonth && vu_monthlyresult.Year == defaultyear
                            select vu_monthlyresult).Single();

var yearlyexpenseincome =  (from vu_yearlyresult in dbBudget.vu_YearlyResults
                            where vu_yearlyresult.Year == defaultyear
                            select vu_yearlyresult).Single();

ViewData["MonthlyExpenses"] = monthlyexpenseincome.Expenses;
ViewData["MonthlyIncome"] = monthlyexpenseincome.Income;
ViewData["MonthlyProfit"] = monthlyexpenseincome.Income - monthlyexpenseincome.Expenses;
4

2 に答える 2

1

一般に、複数のコントローラーに共通のコードがある場合は、コントローラーから継承する別のクラスを作成し、そこにメソッドを保持して、個々のコントローラーにこの新しいクラスを継承させることができます

public class BaseController : Controller
{
   protected string GetThatInfo()
   {
      //do your magic logic and return some thing useful
      return "This is demo return.Will be replaced";
   }
}

そして今、あなたは他のコントローラーのためにこれから継承することができます

public class UserController: BaseController 
{
  public ActionResult Index()
  {
    return VieW();
  } 
}     

しかし、あなたの場合、取得しているデータはドメインデータに固有のものです。したがって、別のクラスに移動することをお勧めします(新しいサービス/ビジネスレイヤーなど)

public static class ProfitAnalysis
{
  public static decimal GetTotalExpense()
  {
     //do your code and return total
  }

}

そして、好きな場所から呼び出すことができます

decimal totalExp=ProfitAnalysis.GetTotalExpense();

そして、あなたはすぐに気付くでしょう、あまりにも多くのViewData使用があると、コードが読みにくく、維持しにくくなります。その日を待たないでください。厳密に型指定されたクラスに切り替えてデータを渡します。

于 2012-08-10T22:23:08.160 に答える
0

クエリは「ビジネス レイヤー」に配置する必要があります。これは、ビジネス ロジックを実行するために呼び出す単なるクラスです。その後、好きな場所で再利用できます。ビジネス クラスをインスタンス化して使用するだけです。メソッドが状態を必要としない場合は、メソッドを静的にすることもできます。そうすれば、インスタンス化する必要さえありません。

例えば:

var expenseService = new expenseService();

ViewData["MonthlyExpenses"] = expenseService.GetMonthlyExpenses();
于 2012-08-10T22:17:26.480 に答える