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

本文探讨了Kotlin中对象属性与字段的区别,强调属性的封装性和读写权限控制的重要性。通过示例展示了如何在Kotlin中使用getters和setters进行属性封装,并指出Java中对属性的模拟实现。文章还提到了领域驱动设计(DDD)在实体对象属性校验中的应用,并推荐了一个开源电商项目Mallfoundry。
摘要由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();
}

如果操作可以被封装成方法,那么如何封装属性呢?

现代的编程语言为使用者提供了一些语法糖来封装属性,比如:C# , Kotlin , Typescript , Scala 等等。

在 Kotlin 中我们可以使用 getset 关键字

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值