※本記事は、ChatGPTによる意訳+翻訳を活用し、レイアウト調整したものです。
※感想は、オリジナルです。
原文
Keep your business code separate from the rest - DEV Community
意訳+要約
ビジネスコードを他から切り離す
ビジネスロジックの分離の重要性
コードの持続性
具体的な実践方法
まとめ: ブログでは、古いコードベースの現代化を進める際、ビジネスロジックを他のコードから分離することの重要性を強調しています。これにより、将来的なフレームワーク変更時にもビジネスロジックを簡単に移行できるようになります。具体的には、ビジネスロジックを独立したフォルダーに保管し、データ処理層を分けて管理することが推奨されています。
ChatGPTへのQA
Q:フォルダ構成は、どうあるのが最適でしょうか?
最適なフォルダ構成の例:
- src/
- business/
- services/
- models/
- repositories/
- controllers/
- middlewares/
- routes/
- utils/
- config/
- business/
詳細:
- business/: ビジネスロジックを集約。サービス、モデル、リポジトリなどを格納。
- services/: ビジネスロジックを実行するサービス。
- models/: ビジネスデータモデル。
- repositories/: データアクセス層。
- controllers/: リクエストを処理し、ビジネスロジックに渡す。
- middlewares/: リクエスト前処理・認証など。
- routes/: APIエンドポイント定義。
- utils/: ヘルパー関数。
- config/: 設定ファイル。
Q:businessフォルダーを分けるのは良いんですが、そこまで破壊的な変更は発生するのでしょうか?
確かにフレームワークが変わる場合、すべてのコードが問題なく移行できる保証はありません。しかし、以下のようにビジネスロジックを分離することで、移行の際の影響を最小限に抑えられる可能性が高まります。
理由
ビジネスロジックの再利用性: フレームワークに依存しない形でビジネスロジックを記述しておくことで、他のフレームワークに移行する際にも再利用しやすくなります。
依存関係の減少: ビジネスロジックとフレームワーク特有のコードを分離することで、特定のフレームワークに強く依存しないコードが作れます。
推奨フォルダ構成
- src/
移行時のポイント
抽象化レイヤーの活用: データアクセスやサービス呼び出しなどを抽象化し、フレームワークに依存しないインターフェースを設ける。
Q:各フォルダ構成の依存関係について説明お願いします
以下は各フォルダ構成の依存関係についての説明です。
フォルダ構成と依存関係
src/
- アプリケーション全体のルートディレクトリ。
business/
controllers/
middlewares/
routes/
utils/
- ヘルパー関数を含む。
- 他のすべてのフォルダから利用可能。
- フレームワークに依存しない汎用的なコードを含む。
config/
- 設定ファイルを含む。
- 他のすべてのフォルダから参照される。
- フレームワークに依存する設定も含まれる。
依存関係の概要
- businessフォルダのコードはフレームワークに依存しないことが推奨されます。
- controllers、middlewares、routesはフレームワークに依存する部分が多いです。
- utilsはどこからでも参照され、フレームワークに依存しません。
- configはアプリケーション全体の設定を含み、すべてのフォルダから参照されます。
このようにフォルダを分けることで、フレームワークの変更時にもビジネスロジックの再利用がしやすくなります。
感想+雑記
何度かやり取りしたけど、フォルダ構成の正解が分からん。
そもそも、サービスのロジックをどこからするのか、すごく迷うんだけど、俺だけ?
個人開発してるのは、ビジネスロジックがほぼないから、あんまりメリットないので、特に分けることはしてない。
FWが変わることがほぼないので、それなら、フォルダ階層が一貫性あるものがいいと思うんだが。
結局、この構成って、ControllerとServiceが1:1になるから、意味あるのか?って毎回思ってしまう。
未だに納得出来ないんだよな。。。
フォルダ構成で戦争起きてしまいそうな気がする。
たぶん、ガンジーでも戦争起こすと思うね。