3

asp.netmvc3でViewModelを使用しています。

私の場合、ビューに接続されたViewModelを開始するコントローラーがあります。

URLに変数DateForLookUpが追加されていない場合、コントローラーはViewModelをDateTime.UctNowで初期化します。それ以外の場合は、変数を使用します。

ビューにリンクするには、作成する必要があります。ユーザーがリンクをクリックしたとき、私はDateForLookUp値を取り、1日を足したり引いたりしなければなりません。

私の質問:

  • このロジック、ServiceLayer、ViewModel、Controller、またはViewを配置するのに適切な場所はどこですか?

見る

@Html.ActionLink("Next Day", "Daily")

@Html.ActionLink("Previous Day", "Daily")

コントローラ

    public ActionResult Daily(string dateForLookUp)
    {
        DateTime dateTimeForLookUp;
        if (string.IsNullOrWhiteSpace(dateForLookUp))
            dateTimeForLookUp = DateTime.UtcNow;
        else 
            dateTimeForLookUp = DateTime.Parse(dateForLookUp);

        var eventsInDate = eventAggregateService.FindAllForDate(dateTimeForLookUp);
        EventsAggregateDailyListViewModel eventDailyVM = new EventsAggregateDailyListViewModel();
        eventDailyVM = new EventsAggregateDailyListViewModelBuilder().Build(eventDailyVM, dateTimeForLookUp);
        return View(eventDailyVM);
    }
4

1 に答える 1

2

私の意見では(そして実際には)、すべてのロジックをサービスレイヤーに配置します。

MVCアプリをいくつかの異なるプロジェクトに分割して、すべてのレイヤーを適切に分離します。

  • AppName.Configuration:アプリの構成を処理します(つまり、web.config / app設定、リソースファイルなどを取得します)
  • AppName.Data:これはすべてのDBアクセスが実行されるデータ層です(ビジネスロジックはありません)。DBML / EDMXはここにあり、私のリポジトリクラスもここにあります。
  • AppName.Models:これは、すべてのViewModelがMVCに対して定義されている場所であり、アプリケーション全体で必要な他のモデルオブジェクトも同様です。
  • AppName.Services:これは私のビジネスレイヤーです。データレイヤーまたはプレゼンテーション/ Webレイヤーに到達するには、すべてがここを通過する必要があります。ViewModelsはデータベースオブジェクトから構築され、データ検証はここで行われます。
  • AppName.Web:これはMVCアプリケーションになります。
  • AppName.Data.Test:データアプリの単体テスト
  • AppName.Services.Test:サービスの単体テスト
  • AppName.Web.Test:MVCコントローラーの単体テスト
  • AppName.Web.UI.Test:Webユーザーインターフェイスの単体テスト(WATINを使用)

また、NuGetパッケージにパッケージ化された一連のクラスがあり、必要に応じて(この例では)アプリに追加できます。

  • CompanyName.Data:データレイヤーロジックの共通ライブラリ
  • CompanyName.MVC:ASP.NETMVC統合用の共通ライブラリ
  • CompanyName.Utilities:その他のユーティリティ用の共通ライブラリ

私のコントローラーは、サービスレイヤーからViewModelsを取得してビューに送信し、ビューからの投稿時にデータを受信して​​サービスレイヤーに送信し、検証、処理、リポジトリへの保存、その他のビジネスロジックを行う以外は何もしません。等

于 2013-02-05T11:17:55.927 に答える