课件和 Demo 地址
https://gitee.com/geektime-geekbang/NET-Core
作者回复: 如果是类似汇总报表这样的诉求,则应该通过数据汇聚的方式解决,类似数据仓库 如果是常规业务列表查询,则看是否可以通过分别查询,应用层处理合并。 如果这种关联查询需求非常多,则说明你微服务拆分有问题,考虑合并服务
作者回复: 你会发现最终实现出来跟EF差不多
作者回复: 后面章节会有
作者回复: 查询后使用ToList方法获取集合
作者回复: 哪怕你做code first,最终还是要定义模型与数据库的映射关系的,EntityTypeConfiguration写法让你显式定义映射关系,使得设计表达更明确。 虽然说约定大于配置,但显式地设计表达比约定更加明确易懂。
作者回复: 可以先取出goods对象,然后操作它的skuitem,然后保存goods
作者回复: 你举例的删除skuitem,用ddd的思维,就是删除某一个good的某个skuitem,要从good这个聚合根找到这个skuitem,然后删除 如果你为skuitem创建了仓储,意味着你可以直接删除某一个特定的skuitem,那就说明它拥有全局唯一标识,它等同于聚合根了。 从方便的角度看,确实方便了,但是未来在些业务的时候,这个对象可以从两个仓储修改和处理,哪个写法是正确的姿势呢,团队成员大概率可能倾向于方便的那个做法,最终变成了原来的三层架构,一个表一个仓储。 另外现在EF这么强大,你的举例,从good聚合根来处理,写法上也不会很复杂吧
作者回复: 业务模型可以不变,仅仅修改实体与数据库的映射关系
作者回复: EF Core 的问题是在复杂查询上生成的SQL会比较复杂,在SQL调优上定位问题略显复杂。 如果使用CQRS模式,则数据写入使用EF Core,查询可以考虑使用其它轻量级的ORM,发挥各自的优势。
作者回复: 实际上EF映射出来也是两种情况,一种是主表上加对应的字段,一种是映射到另外一张表。 不用EF的话,要实现领域模型到仓储会非常复杂,难以维护。