Open2
ハンドラ層/サービス層/リポジトリ層について
ハンドラ層
- 受信した HTTP リクエストに対して、適切なハンドラに振り分ける層
- この層がまず最初にリクエストを受けて、次の層(サービス層)に処理を任せる
サービス層
- レポジトリ層から得てきたデータをハンドラ層が必要としている形に加工し、2つの層の間を埋める層
リポジトリ層
- データベースと通信して、データの取得・挿入を行う層
サービス層でやってはいけないこと
1. サービス層の中にデータベース処理を内包する
例えば、サービス層の中にDB接続する処理を記載したとする。
その状態は、サービス層がDB接続処理に依存していると言える。
サービス層はプロダクトの根幹部分(ビジネスロジック)を担うものでありその重要な層がDBという不安定な外部要因に依存している状態はいただけない。特に以下のような不都合が生じる。
- DBエンジンを変更した時にサービス層に大きな変更が発生する
- DB接続に失敗した場合、サービス層本来の処理に問題がなくてもサービス層でのエラー扱いになる
ではどうすれば良いかというと、サービス層内部でDB接続処理を記載するのではなく、サービス層内部で使うDBを引数を使い外から渡すようにすれば、サービス層内部からDBへの依存をなくすことができる。このように、依存性をなくすためにある処理の内部で使うコンポーネントを外から渡してやるような実装パターンのことを「依存性の注入」という。