Open2

ハンドラ層/サービス層/リポジトリ層について

ShionShion

ハンドラ層

  • 受信した HTTP リクエストに対して、適切なハンドラに振り分ける層
  • この層がまず最初にリクエストを受けて、次の層(サービス層)に処理を任せる

サービス層

  • レポジトリ層から得てきたデータをハンドラ層が必要としている形に加工し、2つの層の間を埋める層

リポジトリ層

  • データベースと通信して、データの取得・挿入を行う層
ShionShion

サービス層でやってはいけないこと

1. サービス層の中にデータベース処理を内包する

例えば、サービス層の中にDB接続する処理を記載したとする。

その状態は、サービス層がDB接続処理に依存していると言える。
サービス層はプロダクトの根幹部分(ビジネスロジック)を担うものでありその重要な層がDBという不安定な外部要因に依存している状態はいただけない。特に以下のような不都合が生じる。

  • DBエンジンを変更した時にサービス層に大きな変更が発生する
  • DB接続に失敗した場合、サービス層本来の処理に問題がなくてもサービス層でのエラー扱いになる

ではどうすれば良いかというと、サービス層内部でDB接続処理を記載するのではなく、サービス層内部で使うDBを引数を使い外から渡すようにすれば、サービス層内部からDBへの依存をなくすことができる。このように、依存性をなくすためにある処理の内部で使うコンポーネントを外から渡してやるような実装パターンのことを「依存性の注入」という。