update

2881099
2022-09-04 13:21:58 +08:00
parent f44a679493
commit 21166fd7a6

@@ -282,3 +282,27 @@ InsertOrUpdate 执行逻辑依托聚合根对象的 `主键` 和 `状态管理`
- 无值,则 `抛出异常`
- 有值,逻辑同上;
## 使用建议
1、**分开定义**,按业务需求分开定义聚合根、及相关实体类。
传统单体项目表很多,在每个实体类设置导航属性会很累,即便定义了也只是一套庞大的实体关系模型,很难划分清除谁才是聚合根(例如 A-B-C-A 这种导航关系)。
应以业务为单位,为每个业务单独设计实体类,单一职责,隔离开发,这样才能更清淅的定义出聚合根实体。
2、**理解边界**,理解本文提出的边界规则。
- ManyToOne 导航属性,是 `边界之外`
- ManyToMany 导航属性,`中间表`OrderTag 是边界之内,`外部表`Tag`边界之外`
- OneToOne 导航属性,是边界之内;
- OneToMany 导航属性,是边界之内;
AggregateRootRepository 只对进行边界之内的数据进行递归 CRUD 操作,把聚合根看本一个整体。
如遇特殊情况,可以继承后重写 Select 属性扩大、或缩小查询内容:
- Insert/Delete/Update `扩大` 后的查询内容,不会对 `扩大` 后的数据进行增删改;
- Update `缩小` 后的查询内容,由于导航属性值为 NULL不会删除未查询的内容
3、**善用事务**,使用事务解决一致操作问题。