我正在处理或尝试使用 ORM 重新建模现有应用程序并尝试尽可能地遵守 DDD。
工单是 AR,有十几个子实体。我打算像这样对这个类进行建模:
class WorkOrder {
private $number = 0;
private $manual = '';
...
// Sub-Entities
private $consumables; // Collection (1:m)
private $dimensions; // Collection (1:m)
private $sequences; // Collection (1:m)
...
}
现在我需要一个存储库来加载(并保留?)这个聚合根——对吗?
回购将返回一个或多个聚合,当我访问子实体时(通过间接 getter/setter——而不是点符号)将延迟加载我所追求的信息???
我将有另一个班级充当创建工单的工厂——这是一个详细的过程,包括大量的业务逻辑/验证规则......
但是,如果工厂创建了工单聚合,repo 是否只会保留 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/
虽然细节非常好,但我需要对我自己的解释提出第二意见,拜托。:)
问候,亚历克斯