私は現在、ORM を使用して既存のアプリケーションを再モデル化している最中か、再モデル化を試みており、可能な限り DDD に準拠しようとしています。
作業指示書は AR であり、12 を超える子エンティティがあります。私はこのクラスを次のようにモデル化するつもりでした:
class WorkOrder {
private $number = 0;
private $manual = '';
...
// Sub-Entities
private $consumables; // Collection (1:m)
private $dimensions; // Collection (1:m)
private $sequences; // Collection (1:m)
...
}
ここで、この集約ルートをロード (および永続化) するためのリポジトリが必要になります -- 正しいですか?
レポは 1 つ以上の集計を返し、サブエンティティにアクセスすると (ドット表記ではなく間接的なゲッター/セッターを介して)、求めている情報を遅延ロードしますか???
作業指示書を作成するためのファクトリとして機能する別のクラスを用意します。これは詳細なプロセスであり、実質的なビジネス ロジック/検証ルールが含まれています...
しかし、工場が作業指示書の集約を作成した場合、レポは AR を永続化するだけでしょうか?
このファクトリは、(REST またはその他の方法で) サード パーティ サービスにクエリを実行し、基本的に作業範囲を説明する承認済みドキュメントのスナップショットを作成する必要があります。
では、リポジトリは ORM をカプセル化するのでしょうか、それともどの永続レイヤーを選択すればよいのでしょうか?
現在、私のファイル構造は次のようになります。
WorkOrder/
/Factory.php
/Aggregate.php
/Repository.php
/Entity/Header.php
/Entity/Shipping.php
/Entity/Warranty.php
/Entity/Certification.php
...
リポジトリには次のようなメソッドがあります。
FindOneByTrackingNumber()
FindAllByCriteria()
save($root);
私の工場には次のようなメソッドがあります。
createWorkOrderFromRpi()
createWorkOrderFromCsv()
...
ここでいくつかの記事と数え切れないほどの投稿を読みました。
http://williamdurand.fr/2013/08/07/ddd-with-symfony2-folder-structure-and-code-first/
詳細は素晴らしいですが、私自身の解釈についてセカンドオピニオンが必要です. :)
よろしく、アレックス