1. ホーム
  2. asp.net-mvc

[解決済み] MVCアプリケーションのService Layerを作成する?

2023-07-20 09:33:34

質問

私の理解では、MVCはクラス定義(モデル)とプレゼンテーション(ビュー)を、コントローラであるquot;glue"を介して分離しています。 コントローラは単一の責任を持つ必要があり、したがってテスト可能である必要があります。 ViewModels は、複数のエンティティからデータを集め、コントローラからビューにデータを転送するために使用されます。

ビジネスロジックの居場所がないような...だから、サービス用の別のレイヤーが適していると思うんだ。 このレイヤーをどこに配置すればよいのか、どのようにサービスを構築すればよいのかがわかりません - 関数の束を含む "services" というクラスでよいのでしょうか? 私はMVCに少し慣れていないので、何か読み物、サンプル、または一般的な新人の種類のヒントがあれば最高です。

どのように解決するのですか?

ASP.NET MVCアプリケーションを開発するとき、私は通常サービスレイヤーを使用します。 これは サービスレイヤーパターン でMartin Fowlerが議論している エンタープライズアプリケーションアーキテクチャのパターン . これはビジネスロジックをカプセル化し、コントローラをかなり薄くするものです。 基本的に、コントローラはサービスレイヤーを使ってドメインモデルを取得し、それをビューモデルに変換します。 また、私は ユニットオブワークデザインパターン を使ってトランザクションを処理し リポジトリデザインパターン でデータアクセスレイヤーをカプセル化し、ユニットテストを容易にし、ORMを簡単に交換できるようにしています。 この図は、私がMVCアプリケーションで使用している典型的なレイヤーを示しています。

この図では、サービス層はアプリケーション層またはドメイン層と表記されていますが、これはサービス層という言葉を使うと混乱するからです。 というのも、「サービス層」という言葉を使うと、人は混乱するからです。 実際には、ASP.NET Web APIやWCFなどの好みのWebサービス技術で使用できるアセンブリであり、コントローラでもあります。

命名規則については、私は通常、ドメインを表すものを使用し、その後にサービスを続けます。たとえば、ユーザー メンバーシップを処理するサービス レイヤーがある場合、MembershipService というクラスがあり、コントローラおよび Web サービスがメンバーシップ ドメインを照会および操作するために必要なすべてのメソッドを備えています。同じアプリケーションに複数のドメインが存在する場合、複数のサービスレイヤーを持つことができることに注意してください。 私がここで言いたいのは、アプリケーション全体を管理するモノリシックなサービスを1つ持つ必要はないということです。