领域驱动设计(DDD):对象属性(property)和 getters , setters 方法

本文探讨了对象属性(property)和字段(field)的区别,强调了封装性和访问控制的重要性。在Java中,getter和setter方法用于模拟属性的封装,而在其他语言如Kotlin和Typescript中,有专门的关键字。属性的读写权限是区分其功能的关键,而字段不具此特性。此外,文章提到了实体对象属性的校验和开源电商项目Mallfoundry,该项目基于Spring Boot和领域驱动设计实现。
摘要由CSDN通过智能技术生成

对象属性(property)和 getters , setters 方法

“需要为一个对象的属性添加 Getters / Setters 方法”而提出为什么?由此而进行深入思考。

它是字段(field)

在 Java 中我们都知道如何在类(Class)中声明一个成员属性(field)。

public class HikariConfig {
   
    public long connectionTimeout;
    public long validationTimeout;
}

当我们需要设置对象的属性值时,我们可以直接使用 = 赋值。

public class HikariConfigTests {
   
    public static void main(String[] args) {
   
        var config = new HikariConfig();
        config.connectionTimeout = 250;
        config.validationTimeout = 250;
    }
}

如果我们需要在设置 connectionTimeout 属性时,做一些赋值校验。比如:connectionTimeout 不能小于 250ms 。

public class HikariConfigTests {
   
    public static void main(String[] args) {
   
        var config = new HikariConfig();

        var connectionTimeoutMs = 250;
        if (connectionTimeoutMs < 250) {
   
            throw new IllegalArgumentException("connectionTimeout cannot be less than 250ms");
        }

        config.connectionTimeout = connectionTimeoutMs;
    }
}

属性(property)具有封装性

面向对象有三大特性:继承、封装、多态。

我们应该已经发现校验 connectionTimeout 的逻辑(代码)被放置在 HikariConfig 对象自身之外,但从面向对象的角度来说如校验属性的代码应该放在 connectionTimeout
上,但是字段(field)不具备封装性。

如果你发现了这个问题,那么面向对象的设计者们也一样会发现这个问题。

当听到属性这个词时,你想到的是什么呢?

  • 你可能想到的是字段(field),因为 field 常常会被翻译为成员属性(field)。
  • field 真正要表达的意思是:一块存放数据区域。

一个对象是由属性和操作组成的。操作可以被封装成一个方法:

public interface Runnable {
   
    void run()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值