私は次のように別れるC#MVCアプリケーション持っている: 表示 - >コントローラ - >サービス - >リポジトリサービスリファレンスを別のサービスレイヤに悪い習慣を渡していますか?
私は戻っ独自のビューモデルを持つ各ビューに薄いコントローラの練習を使用します関連するサービスから。
クイック例: ビュー:/ NewAppointment /ステップ1
そののcontrolerは次のようになります。
public ActionResult Step1()
{
return View(_appointmentService.Step1GetModel());
}
そして予定のサービス層は、次のようになります。
public Step1Model Step1GetModel()
{
return new Step1Model();
}
したがって私は、アプリケーションごとにいくつかの異なるサービスレイヤーを使用しており、それぞれ異なるインターフェイスを実装しています。
私の質問は、あるサービスレイヤを別のサービスレイヤとやりとりさせる必要があるときに発生します。この場合、サービスコールへのインタフェース参照を渡す方が良いでしょうか、コントローラがすべてのデータを収集して関連する結果をサービスに返すようにしなければなりませんか?
例:
は、私は、デフォルトでは、顧客の情報と私のビューモデルを投入してみたいと思います。私はこれを行うための参照2つの方法があります。
は...コードで
を任命サービスへの顧客インターフェースの参照を渡し、その後、予定のサービスは、顧客サービスにおける適切なGetCustomerメソッドを呼び出してみましょう:
private ICustomerService _customerService;
private IAppointmentService _appointmentService;
public ActionResult Step1()
{
var viewModel = _appointmentService.Step1GetModel(_customerService);
return View(viewModel);
}
OR
コントローラは、顧客を得るためのロジックを処理してみましょう、その後、予定のサービスにその結果を渡します。コードで
:
private ICustomerService _customerService;
private IAppointmentService _appointmentService;
public ActionResult Step1()
{
var customer = _customerService.GetCustomer();
var viewModel = _appointmentService.Step1GetModel(customer);
return View(viewModel);
}
私はより良い練習になりますどのように引き裂かれています。最初のコントローラは、コントローラを素早く保ちますが、予定サービスと顧客サービスの間にサービス間の依存関係を作成します。 2つ目はコントローラにロジックを追加しますが、サービスは完全に独立しています。
誰にでもより良い方法があると思っていますか?
感謝〜
コメントを評価してください。 – TheRightChoyce
おっとり、間違いを入力してください。私は "ダム"ビューモデルの原則に従ってきました。ほとんどの人はコンストラクタを持っていないし、コンストラクタを持っていないという点でもそうです。しかし、このように提示すると、コンストラクタを追加してから、AutoMapperなどを使用して関連するドメインレイヤ情報を取得するというロジックが見えます。私はドメインマッピングのすべてのビジネスがどこに行くのかについて内部的な討論をしていますが、ダムビューモデルと物事コントローラーのアイデアに固執しています。 – TheRightChoyce
これはまさにですオートマッパーが作られたシナリオ。私は助けになることができてうれしいです。 – jonnii