php - 哪个是最佳实践?身份类型或设置动态属性运行时?
问题描述
在设计一个类时,我假设拥有一个$id
属性将使该类Entity
而不是一个值对象。
我还有一个toArray()
将对象转换为关联数组的方法,该响应被发送到 post 和 patch api。
现在我有以下问题:
POST
有效,因为我没有id
在体内发送。但是,PATCH
如果我在对象创建后动态设置属性是否可以?例如:
$redCircle = new Circle(“red”);
$redCircle->id = 10;
$api->patch($redCircle->toArray());
解决方案
与 DDD 不同,您的观点非常技术性。
您应该根据业务规则(不变量)设计聚合和嵌套实体。
在设计一个类时,我假设拥有一个 $id 属性将使该类成为实体而不是值对象。
这不是真的。在某些情况下,本地值对象(来自远程聚合,在另一个有界上下文中)需要一个 ID 属性才能保持最新(即通过后台任务)。反腐败层需要这个属性,所以原因是纯技术的。
POST 有效,因为我没有在正文中发送 id。但是对于 PATCH,如果我在对象创建后动态设置属性可以吗?
同样,这不是问题的 DDD 视图。在 DDD 中,Aggregate 执行命令:不简单地直接更新其内部状态;这会破坏它的封装。
但是要回答您的问题,考虑到您有一个CRUD应用程序:为了改变实体的某些部分,您需要在突变之前从存储库中加载它。存储库将设置 ID 以及其他属性。
定位实体的最佳方法之一是使用RESTful API,因此客户端无需为 PATCH 操作构建 URL。
推荐阅读
- ubuntu - MiniKF 安装错误,在 Kubeflow 安装过程中 94% 后失败
- mongodb - 无法使用 Moongoos 连接到 Mongodb
- excel - 无法使用 VBA 更改单元格日期格式
- mongodb - 在 mongodb 中聚合嵌套数组
- java - Aspose:使用 USE_DESTINATION_STYLES 的 InsertDocument 不起作用
- java - Selenium 获取传输数据的大小(资源大小)
- excel - 如何将行剪切到另一张纸上,然后在没有循环冻结的情况下删除 + 移动下一行?
- python - 如何使用python修改JSON文件中的多个值
- javascript - 将对象数组映射到新组中
- python - 如何计算 csv 列中的元素数并根据该计数返回另一列中的元素?