CodeIgniter を使用していくつかの小さなシステムを設計しましたが、現在は大きなシステムを設計/構築しています。私は常に同じ構造 (ここで説明するもの) に従いましたが、これまでのところ非常にうまく機能しています。私の現在のプロジェクトでは、Doctrine を ORM として使用しようとしましたが、最終的にプロジェクトから除外することにしました。
(レイヤーには少し異なる用語を使用する場合がありますが、可能な限り、用語と並行して配置しようとしました。)
私が使用する構造は次のとおりです。
- コントローラー (例: /application/controllers/UserController.php)
- Data Mapper (ORM) レイヤー (例: /models/tables/UserTable.php)
- ドメイン オブジェクト層 (例: /models/data_models/User.php)
- レイアウト (例: /models/layouts/default.php)
- テンプレート (ビュー) (例: /application/templates/user/view-profile.php)
責任:
- (2) Data Mapper レイヤーには、すべての SQL とすべての Doctrine EntityManager の使用法が含まれています。ドメイン オブジェクトを格納および取得します。
- (3) ドメイン オブジェクトはエンティティを表します (Docblock Annotations 形式を使用して、Doctrine のコメントに記述されたエンティティ メタデータを使用)。
- (1) コントローラーは、ORM レイヤーを呼び出すロジックのみを実行します。おそらく、データまたは計算の再構築を実行します。
- (4) レイアウト レイヤーは、ページの準静的なフレームをより動的なコンテンツから分離するのに大いに役立ちます。CodeIgniter とレイアウトを参照してください。あなたがアイデアが好きなら。
- (5) テンプレートは基本的に、いくつかの PHP スニペットを含む HTML です。
クラスを含むすべてのファイルには、ファイル名と同じ名前のファイルごとに1つのクラスが含まれています(http://www.php-fig.org/psr/0/に従って)が、難しいと思うため、名前空間を使用しませんそれらを使用しない CodeIgniter で動作するようにします。
特に小規模または中規模のプロジェクトで作業していて、パフォーマンスが重要でない場合は、モデルをオートローダーにロードできます。このような場合、私は常にすべてのモデルをオートローダーでロードします。ただし、より大きなプロジェクトでは、広く使用されているモデルをオートローダーにロードし、より具体的なモデルをコントローラー コンストラクターにロードしたり、より具体的なモデルをアクションにロードしたりすることをお勧めします。