问题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