3 回答
TA贡献1864条经验 获得超2个赞
通过使用@Getter
, @Setter
,@Data
或@Value
Lombok会自动生成您字段的公共访问器,如果您不需要公开AccessLevel.NONE
可以在@Getter
,上使用的字段@Setter
。使用 lombok 可以尊重
封装。
我建议您将数据结构和可以对其执行的操作(例如验证)视为单独的关注点。通过这种方式,您将能够分别修改数据和验证。为了实现这一点,您可以使用一些框架,如spring或aspectj。
如果您觉得这种方法对您的应用程序来说太过分了,您可以求助于不可变数据结构 ( @Value
) 以及用于创建实例的私有构造函数和静态方法。这些方法将执行必要的验证。
在类上添加验证的另一种方法是使用hibernate 验证在 getter 上使用注释。
TA贡献1805条经验 获得超10个赞
是的。你是对的。所以你应该根据上下文谨慎使用它。
如果一个对象是一个富域对象,那么简单地@Setter
为其所有字段添加公共设置器可能是一个坏主意,因为客户端可以轻松地将任何字段设置为任何值,而无需调用封装所有应完成的业务逻辑的正确方法。 。所以最终,对象的状态可能是不正确的。
但如果对象只是作为一个数据容器,没有任何业务逻辑(例如DTO),使用@Setter
/@Getter
可以节省你一些时间,并使代码噪音更少。
TA贡献1846条经验 获得超7个赞
它不会破坏数据封装,而是使其更加方便:简单的 getter 和 setter 只是噪音。
如果您的代码需要除简单的获取或设置之外的其他内容,那么显然自动生成它们是没有意义的——但这是一个正交问题:您也无法手动完成。
您将受限访问与业务逻辑混为一谈。
无论如何:您也许能够使用 AOP 系统在自动生成的函数周围放置保护子句,但您需要强制执行处理器运行的顺序。在我看来,这会造成混乱并产生额外的认知开销:业务逻辑要么是显式的,要么是分层在显式代码之上的。
添加回答
举报