ビジネスロジックのプロジェクト構造
Project Structure - By Artifact or Business Logic?
普通2番目(ユースケース/機能ごと)を採用すると思うけど、1番目(コンポーネントタイプごと)を採用しているケースも案外あるのではないかな。
レイヤ構造または機能構造の優先順位でプロジェクトやフォルダは構造化するよね。
レイヤ優先パッケージ構造
−−−−−−−−−−−−−−−−−−− 「機能1UI」「機能2UI」「機能3UI」 −−−−−−−−−−−−−−−−−−− 「機能A BIZ」「機能B BIZ」 −−−−−−−−−−−−−−−−−−− 「機能X DB」「機能Y DB」「機能Z DB」 −−−−−−−−−−−−−−−−−−−
「機能1UI」から「機能A BIZ」や「機能B BIZ」を呼び出しOK。
○ ビジネスロジックのコードの共通化は行いやすい
× 共同所有するコードが増えるため分散開発しにくい
機能優先パッケージ構造
−−−−−−−|−−−−−−−|−−−−−− 「機能1UI」 |「機能2UI」 |「機能3UI」 −−−−−−−|−−−−−−−|−−−−−− 「機能1BIZ」 |「機能2BIZ」 |「機能3BIZ」 −−−−−−−|−−−−−−−|−−−−−− 「機能1DB」 |「機能2DB」 |「機能3DB」 −−−−−−−|−−−−−−−|−−−−−−
「機能1UI」からは「機能A1 BIZ」のみ呼び出しOK。
コードの共同所有は各機能を開発するチームごと。
○ 機能ごとに開発チームを分散させやすい。
× コードの共通化は低い。
混合型パッケージ構造
−−−−−−−|−−−−−−−|−−−−−− 「機能1UI」 |「機能2UI」 |「機能3UI」 −−−−−−−|−−−−−−−|−−−−−− 「機能1BIZ」 |「機能2BIZ」 |「機能3BIZ」 −−−−−−−−−−−−−−−−−−−−− 「機能X DB」「機能Y DB」「機能Z DB」 −−−−−−−−−−−−−−−−−−−−−
現実的にはチーム構成やアーキテクチャに合わせて上手く組み合わせるべきでしょうね。