• 陈文昕
    2021-02-07
    “用 I 表示接口,用 Impl 表示实现”,这种问题需要怎么修改? 目前我的写法都是 用Impl表示实现,接口就正常写成XxxxService

    作者回复: 如果一个接口只有一个实现类,也许不需要这个层次关系,即便有,一个命名可以是 DefaultXXX。 如果一个接口有多个实现类,那就需要把不同实现类的特点描述出来,比如,FileXXX,DbXXX 等等。

    
    16
  • 斯盖丸
    2021-02-06
    请问老师,static转成final的那步里,如果不止是UserAccounts而是其他类也要用到这同一份userContext那应该怎么获取?能保证是同一份吗?

    作者回复: 你仔细看一下,调整的过程是,先把对象变成同一个对象,然后,才是消除 static,所以,它们用的肯定是同一个对象。

    共 5 条评论
    3
  • 邵俊达
    2021-08-21
    郑老师您好,「如果一个函数牵扯到 Singleton 类也不好测试」请问为什么一个函数牵扯到「Singleton类」会不好测试呢? 我一般会把一个包含工具函数的工具类做成 Singleton。 在测试调用了工具函数的某个方法的时候没发现不好测试。请问该如何理解这句话?

    作者回复: 我在几个专栏里都讨论过 Singleton 模式和 static 函数,关键点在于 static 函数如果参与到测试过程中,就不好模拟,所以,尽量不要写 static 函数。 但在这个讨论里,我也留了一个口子,就是程序库函数,用更具象的说法,就是不牵扯任何 static 字段的函数。你的场景其实是属于这种场景的。但是,在这种情况下,其实也没有必要使用 Singleton,简单的 static 函数就够了。

    
    2
  • 杨宇
    2021-05-28
    老师重构的过程让我眼前一亮——原来还能这样“小步”!

    作者回复: 抓住重点了

    
    2
  • norton/Dark
    2021-04-24
    老师,我觉得impl是过时的设计,说服力还不够,个人感觉挺直观的,有什么负面案例呢?如果在项目中消减这种设计,还是得有说服力的说法。麻烦再深入讲解下。

    作者回复: 严格地说 Impl 不直观,因为它看不出与接口之间的关系,这就好比,你说一个类名字应该叫 Class 一样,没错,但没有意义。我们应该用清晰的名字进行命名,比如,基于文件的实现就叫 FileXXX,基于数据库的实现就叫 DbXXX,基于 REST 的实现就叫 RestXXX。

    共 2 条评论
    1
  • fengkuok
    2021-02-18
    "如果一个接口只有一个实现类,也许不需要这个层次关系,即便有,一个命名可以是 DefaultXXX。" 有接口,单元测试时方便mock。如果没有接口,只能是集成测试?

    作者回复: 你可以站在类型的角度去理解,其实,mock 时模拟的是一个类型,这个类型可以是用一个接口实现的,也可以是用一个类去实现的。所以,没有接口,只有类是没有问题的。

    
    
  • ifelse
    2022-06-03
    尽量不使用 static--记下来
    
    
  • lamb
    2022-05-03
    第三方的工具类要使用它static方法:工具类有public构造方法通过new 工具类ide会提示 使用类名调用不要通过实例的方式;没有public方法如何处理
    
    
  • Geek_3b1096
    2021-02-08
    非常喜欢一步一步重构代码教学
    
    