Skip to content

问题1:关于值对象的方法调用

你的理解有一点偏差。让我详细解释:

PhoneNumber 和 Email 是值对象(Value Object),它们的结构如下:

java
// PhoneNumber 值对象
public class PhoneNumber {
    private final String number;  // 使用 getNumber() 获取
    
    public PhoneNumber(String number) {  // 这是有参构造函数
        // 验证逻辑...
        this.number = cleanNumber;
    }
    
    public String getNumber() {  // getter方法
        return number;
    }
}

// Email 值对象
public class Email {
    private final String address;  // 使用 getAddress() 获取
    
    public Email(String address) {  // 这是有参构造函数
        // 验证逻辑...
        this.address = trimmedAddress;
    }
    
    public String getAddress() {  // getter方法
        return address;
    }
}

关键点:

1.getNumber() 和 getAddress() 是 getter 方法**,不是构造函数

  • entity.getPhoneNumber().getNumber() 的执行流程:

  • 先调用 entity.getPhoneNumber() 获取 PhoneNumber 对象

  • 再调用 PhoneNumber 对象的 getNumber() 方法获取字符串值

2.为什么不用 getValue() ?**

  • 因为 PhoneNumber 类中字段名是 number,Lombok 的 @Getter 会生成 getNumber() 方法

  • 同理,Email 类中字段名是 address,所以生成的是 getAddress() 方法

3.对象赋值的层次:

   UserEntity (领域实体)
       ↓ 包含
   PhoneNumber (值对象) → 内部存储 String number
       ↓ 转换为
   UserPO (持久化对象) → 直接存储 String phone

Powered by VitePress