COMPANY SERVICE STAFF BLOG NEWS CONTACT

STAFF BLOG

スタッフブログ

TECHNICAL

テクログ

2023.12.06

FuelPHP使ってますが、どういうディレクトリ構成がいいのか

テクログphp

## 現状

現状では大体以下の感じです。

`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処理において、同じ様な処理が作られてしまうかもしれない

## 個人的にモジュール性が高いことが正義だと思ってます

上記に上げたデメリットはモジュール性が高ければ許容しちゃっていいと思ってます。

モジュール性さえ高ければテストコードも書きやすいし、テストコードが書けるならりファクタリングもやりやすいっていう考えです。

## それでも実施してないです

必要な体力が今の自分には無いので実施してないです。

現状よりも良くなるとも限らないので。

リファクタリングというよりもリアーキテクティングになると思いますし、結構リスキーです。

## おわり

おわりです

この記事を書いた人

インドア

入社年2017年

出身地埼玉県

業務内容開発

特技・趣味映画・アニメ鑑賞、ゲーム、散歩、勉強

テクログに関する記事一覧

TOP