V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
brucefu
V2EX  ›  Java

[今日疑问] Java Bean 是否还需要 getter setter(中国)

  •  
  •   brucefu · 2020-03-01 22:31:35 +08:00 · 3164 次点击
    这是一个创建于 1487 天前的主题,其中的信息可能已经有所发展或是发生改变。
    • 目前的 getter setter 是否仅仅是为了迎合以前的规范、迎合各大框架的默认构造 bean 的方式
    • Spring 现在已经不在意一个 bean 有没有 getter setter 了
    • 现在 getter setter 都是默认生成的,而且就算有业务逻辑,也不敢写在其中,因为:
      • 1、其他人会忽略,没有人会在意这些摆砖一样的方法
      • 2、getter setter 方法名并不能够反映业务逻辑,所以要把业务逻辑封装到一个望名只意的方法里
    5 条回复    2020-03-06 23:13:19 +08:00
    lhx2008
        1
    lhx2008  
       2020-03-01 22:36:30 +08:00 via Android
    getter 是符合贫血模型的,简单的程序保留无妨。如果是真正的面向对象或者是说充血模型,那么无脑 getter 是破坏了面向对象的封装特性,不推荐。我不用 lombok
    chendy
        2
    chendy  
       2020-03-01 22:51:27 +08:00
    具体情况具体分析
    Spring 的 bean,目前除非特殊需求否则只留构造方法
    数据类的就一个`@Data`搞定,如果不方便直接加就自己写
    IMCA1024
        3
    IMCA1024  
       2020-03-02 09:39:51 +08:00
    弄一个 lombok
    直接一个 @Data 我也不考虑了
    passerbytiny
        4
    passerbytiny  
       2020-03-02 10:03:54 +08:00
    逐条回复:
    1、getter setter 不是规范,是封装——面向对象编程基本元素——的要求;各大框架从来也没用 getter setter 来构造 bean,而是用它们来做序列化 /反序列化。
    2、Spring 从来都没在意过 getter setter,setter 只是其推荐的其中一种注入方式;以及,直接在字段上注入的方式,并不是 Spring 推荐的注入方式。
    3、请参见第一条,getter setter 是用来做封装的,不是用来写业务逻辑的,因此它必定绝大多数情况下都保持默认即可;大多数人不用,不代表没有人不会用。

    因为是面向对象编程基本元素的要求,所以虽然已经众人烦了,但是没人敢让它消失。现在只能,先用 lombok 临时顶着。Lombok、C#“属性”都很好用,但是从来没有被 JCP 接纳过,以后被接纳的可能性也不太大(大概这种编译擦除的方式,争议性太大)。
    liliumss
        5
    liliumss  
       2020-03-06 23:13:19 +08:00
    @passerbytiny 意思是 getter setter 就是 oop 的基础之一,去掉就失去 oop 的意义了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3300 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 11:27 · PVG 19:27 · LAX 04:27 · JFK 07:27
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.