在设计类时,我假设拥有一个$id
属性将使该类Entity
而不是值对象。
我还有一个toArray()
方法,该方法将对象转换为关联数组,并将响应发送到post和patch api。
现在我有以下问题:
POST
有效,
因为我没有在正文中发送id
。但是对于PATCH
,如果在创建对象后动态设置属性就可以了吗?例如:
$redCircle = new Circle(“red”);
$redCircle->id = 10;
$api->patch($redCircle->toArray());
答案 0 :(得分:0)
与DDD相比,您的观点非常技术性。
您应根据业务规则(不变式)设计汇总和嵌套实体。
在设计类时,我假设拥有$ id属性将使该类成为Entity而不是值对象。
这不是事实。在某些情况下,本地Value对象(在另一个Bounded上下文中来自远程Aggregate)需要ID属性以便保持最新(即通过后台任务)。反腐败层将需要此属性,因此原因纯粹是技术性的。
POST有效,因为我没有在正文中发送ID。但是对于PATCH,如果在创建对象后动态设置属性就可以了吗?
同样,这不是该问题的DDD视图。在DDD中,一个Aggregate执行命令:一个不简单地直接更新其内部状态;另一个不简单地直接更新其内部状态。这将破坏其封装。
但是要回答您的问题,请考虑您拥有一个CRUD应用程序:为了对实体的某些部分进行突变,您需要在突变之前从Repository加载它。存储库将设置ID以及其他属性。
查找实体的最佳方法之一是使用RESTful API,因此客户端无需为PATCH操作构造URL。