• 子衿
    2023-02-09 来自上海
    1. 公共字段比较多,那么首先从上节课表设计的角度,就不应该每个子类一个表了,先将表的设计改成每个类一个表,此时由于子项目仍然不能是聚合根,因此依然不能使用继承的方式,由于EffortItem中新增了属性值,又不适合作为接口,所以此时考虑将整个EffortItem作为一个属性放入到项目、子项目、普通工时项中,也就是组合替代继承,最终仍然通过Respository消除这种不匹配 2. 可以考虑为CorporateClient创建Builder

    作者回复: 嗯,两个问题的思路都不错。尤其是第1题的组合思路。

    
    9
  • tt
    2023-02-18 来自北京
    1、按照这里的场景,因为考虑到聚合根和工时项两大特性,只能把工时项作为接口,如果共用字段比较多,那可以写一个默认实现,真正的子类在派生自它,只重写必要的方法。 2、使用builder模式。

    作者回复: 嗯,是一种办法

    
    1
  • Geek_ca43a3
    2023-06-30 来自广东
    "如果让 SubProject 也继承 EffortItem 类的话,SubProject 就成了聚合根",这句话怎么理解?

    作者回复: 如果EffortItem是AggregateRoot的子类,而SubProject又是EffortItem的子类,那么,SubProject也就是AggregateRoot的间接子类了,这是,可以说SubProject是一个AggregateRoot。

    
    
  • 许勇
    2023-05-01 来自北京
    问题1,继承工时项,实现聚合根接口

    作者回复: 是的,用接口继承代替实现继承。

    
    
  • 杰
    2023-04-09 来自广东
    “此外,Client 是聚合根的子类,这就意味着它的所有子类也是聚合根。” 老师,一个聚合不是只能有一个聚合根吗?这样的话,个人客户也是聚合根,企业客户也是聚合根,那不是冲突了吗?

    作者回复: 注意一点:聚合是对象实例和实例之间的关系,不是类和类之间的关系。从类的角度有三个类:客户、个人客户、企业客户,但具体到对象,比如某个个人客户,就只有一个对象了。关键要理解这句话“聚合是对象实例和实例之间的关系,不是类和类之间的关系”

    
    
  • 赵晏龙
    2023-02-24 来自湖南
    1 abstract 2 builder,另外,我一般只在构造函数中放【键】,其他不放。

    作者回复: 1 关键是 abstract 也不能解决 Java 只能单继承的问题 2 没问题

    
    
  • 请叫我和尚
    2023-02-21 来自北京
    在代码里的 addCorporateClient、updateCorporateClient 方法应该加事务控制吧,看文中没有加

    作者回复: 建议把事务控制加在应用层,而不是Repository上面

    共 2 条评论
    
  • 子衿
    2023-02-09 来自上海
    老师这边有个问题想问一下,就是下层肯定是不应该调用上层,那么同层之间可不可以互相调用呢,看示例中,Handler和Repository都是领域层,他们间就进行了互相调用,但如果不同的两个模块的应用服务间,是不是可以互相调用呢,互相调用时,是不是就可能产生循环依赖,这种问题一般怎么解决,也是通过在领域服务层加接口,然后在适配器层实现,从而解决吗,还是有什么最佳实践

    作者回复: 理论上可以互相调用。 尽量避免循环依赖。解决方式有多种,要看具体情况。抽接口也是一种常见的做法。

    共 2 条评论
    
  • aoe
    2023-02-25 来自浙江
    原来在敏捷实战中可以忽略「详细的设计图」,确实比传统的面向对象方法学要快很多 学到了在父类中使用抽象方法 getClientType() 代替 枚举类实现「开闭原则」的技巧
    
    2