これは特定のプロジェクトに依存すると思います。
たとえば、異なるビジネスドメインが互いに完全に独立している場合、ビジネスドメインごとに整理します。
しかし、ビジネスドメイン間で共有コードがある場合、またはビジネスドメインが同じコードベースの異なるバリアントである場合は、技術ドメインごとに整理する方が論理的です。また、何らかのオブジェクト指向言語を使用する場合は、ビジネス固有のファイルで汎用コントローラー、モデルなどをサブクラス化して、より薄くすることができます。
また、2つの中間(ゴールデン)があります-共有コードを独自のドメインに取り除き、それを他のドメインで使用します。これにより、直感的に操作できるレイアウトが得られますが、ビジネスドメイン間でコードを共有できます。
Domain1 # This domain changes bits of standard MVC code
controllers
models
views
Domain2 # this domain only modifies views, all else is standard
views
Shared # Here is the better part of code base
controllers
models
views
PS。ほとんどのフレームワークは、コードを共有していない場合に別のプロジェクトを作成する場合にのみ、異なるビジネスドメインを単一のプロジェクトに混在させることを期待する傾向があるため、技術ドメインごとに整理すると思います。
編集:
たとえば、会社の倉庫を処理するWebアプリがあるとします。一般的な形では、これは多くの企業に当てはまるかもしれませんが、それぞれが満たしていない特定の詳細を持っている可能性があります。たとえば、彼らの一人はフォークリフトにタブレットを展開し、アイテムをデフォルトの2レベルではなく3レベルに整理します。
もちろん、これらの会社ごとにプロジェクトを分岐できます。ただし、フレームワーク/言語で許可されている場合は、サブクラス化やプラグインなどを使用して、汎用プロジェクトの断片をすべての顧客のニーズに合わせてカスタマイズし、ビジネスドメインレイアウトで整理できます。
たとえば、汎用プロジェクトがJSONにアイテム自体のみをエクスポートする場合、Domain1はコントローラーをサブクラス化し、最近の配信の問題もエクスポートすることができます。
また、後でDomain1にDomain2にも有効なコンポーネントがあることがわかった場合、その汎用バージョンをSharedに抽出できます。
あなたが言ったように、多くのフレームワークは技術的なドメインごとに整理されており、私が選んだFWがこれを簡単にするという理由だけで、私は今のところそれを使用しています。しかし、少し(または大量の)エルボグリスで、インクルードパスを書き換えてビジネスドメインレイアウトもサポートできると思います。