2023.12.06
STAFF BLOG
スタッフブログ
TECHNICAL
テクログ
## 現状
現状では大体以下の感じです。
`applicationservice` ディレクトリは `controller` ごとに必要な処理を記載していくつもりで存在しています。
ちなみにですが、「アプリケーションサービス」と「ドメインサービス」の違いは分かっていません。「ドメインサービス」はプロダクトの根幹のようなルールを制御するところで、「アプリケーションサービス」はその根幹の上で提供するサービスだと解釈しています。
モジュール性さえ高くなればいいと考えています。
fuel
├ app
├ classes
├ applicationservice
│ ├ ページA
│ │ ├ 機能A-1ファイル
│ │ └ 機能A-2ファイル
│ └ ページB
│ ├ 機能B-1ファイル
│ └ 機能B-2ファイル
├ controller
│ ├ ページAへのリクエストを受けるファイル
│ └ ページBへのリクエストを受けるファイル
└ model
├ DBテーブル1へのCRUD処理ファイル
(ページA,ページBで使うメソッドが混在)
└ DBテーブル2へのCRUD処理ファイル
(ページA,ページBで使うメソッドが混在)
## 問題に感じること
- ・`applicationservice` ディレクトリ内から `model` ディレクトリ内までの視覚的な距離が遠いこと
- ・`model` ディレクトリ内の1ファイルがとても太っていること
- ・`applicationservice` ディレクトリ内の「機能A-1」などの機能ごとのモジュール性をもっと高くできること
## こうするといいのでは?
これを以下のようにしたらいいのかなって密かに思ってます。
「機能A-1」などの処理ごとにディレクトリを作成し、そのディレクトリ配下にDBテーブルへのCRUD処理ファイルを「機能A-1」ごとに作成します。「機能A-1を処理するファイル」などでDBテーブルへのCRUD処理を呼び出します。
fuel
├ app
├ classes
├ applicationservice
│ ├ ページA
│ │ ├ 機能A-1
│ │ │ ├ 機能A-1を処理するファイル
│ │ │ └ model
│ │ │ ├ DBテーブル1へのCRUD処理ファイル
│ │ │ │ (ページAの 機能A-1 で使うメソッド)
│ │ │ └ DBテーブル2へのCRUD処理ファイル
│ │ │ (ページAの 機能A-1 で使うメソッド)
│ │ ├ 機能A-2
│ │ ├ 機能A-2を処理するファイル
│ │ ├ model
│ │ ├ DBテーブル1へのCRUD処理ファイル
│ │ │ (ページAの 機能A-2 で使うメソッド)
│ │ └ DBテーブル2へのCRUD処理ファイル
│ │ (ページAの 機能A-2 で使うメソッド)
│ ├ ページB
│ ├ 機能B-1
│ │ ├ 機能B-1を処理するファイル
│ │ └ model
│ │ ├ DBテーブル1へのCRUD処理ファイル
│ │ │ (ページBの 機能B-1 で使うメソッド)
│ │ └ DBテーブル2へのCRUD処理ファイル
│ │ ( ページBの 機能B-1 で使うメソッド)
│ └ 機能B-2
│ ├ 機能B-2を処理するファイル
│ └ model
│ ├ DBテーブル1へのCRUD処理ファイル
│ │ (ページBの 機能B-2 で使うメソッドのみを記載)
│ └ DBテーブル2へのCRUD処理ファイル
│ (ページBの 機能B-2 で使うメソッドのみを記載)
├ controller
├ ページAへのリクエストを受けるファイル
└ ページBへのリクエストを受けるファイル
## こんなメリット・デメリットがあると感じます
### メリット
- ・視覚的に関係をすぐに見いだせる
- ・`model` ディレクトリ内の1ファイルが痩せる
- ・モジュール性が高くなる
- たとえば「機能A-1」ディレクトリを削除すると「機能A-1」に関係する処理を全て削除できますので、モジュール性が高いと思っています
### デメリット
- ・ファイル数が多くなって何かが起きるかも
- ・DBテーブルへのCRUD処理において、同じ様な処理が作られてしまうかもしれない
## 個人的にモジュール性が高いことが正義だと思ってます
上記に上げたデメリットはモジュール性が高ければ許容しちゃっていいと思ってます。
モジュール性さえ高ければテストコードも書きやすいし、テストコードが書けるならりファクタリングもやりやすいっていう考えです。
## それでも実施してないです
必要な体力が今の自分には無いので実施してないです。
現状よりも良くなるとも限らないので。
リファクタリングというよりもリアーキテクティングになると思いますし、結構リスキーです。
## おわり
おわりです