diff --git a/plusone-basic/plusone-basic-domain/src/main/java/xyz/zhouxy/plusone/domain/ValidatableStringRecord.java b/plusone-basic/plusone-basic-domain/src/main/java/xyz/zhouxy/plusone/domain/ValidatableStringRecord.java deleted file mode 100644 index 0a03e65..0000000 --- a/plusone-basic/plusone-basic-domain/src/main/java/xyz/zhouxy/plusone/domain/ValidatableStringRecord.java +++ /dev/null @@ -1,41 +0,0 @@ -package xyz.zhouxy.plusone.domain; - -import java.util.Optional; -import java.util.regex.Pattern; - -import com.fasterxml.jackson.annotation.JsonIgnore; -import com.fasterxml.jackson.annotation.JsonValue; - -/** - * 带校验的字符串值对象 - * - * @author ZhouXY - */ -public abstract class ValidatableStringRecord implements IValueObject { - - protected String value; - protected final Pattern format; - - protected ValidatableStringRecord(Pattern format) { - this.format = format; - } - - @JsonIgnore - protected boolean isValid() { - return format.matcher(value).matches(); - } - - @JsonValue - public String value() { - return value; - } - - @Override - public String toString() { - return value; - } - - public static String getValueOrNull(Optional s) { - return s.isPresent() ? s.get().value() : null; - } -} diff --git a/plusone-system/plusone-system-domain/src/main/java/xyz/zhouxy/plusone/system/domain/model/account/Email.java b/plusone-system/plusone-system-domain/src/main/java/xyz/zhouxy/plusone/system/domain/model/account/Email.java index 680e881..15fbf58 100644 --- a/plusone-system/plusone-system-domain/src/main/java/xyz/zhouxy/plusone/system/domain/model/account/Email.java +++ b/plusone-system/plusone-system-domain/src/main/java/xyz/zhouxy/plusone/system/domain/model/account/Email.java @@ -3,8 +3,11 @@ package xyz.zhouxy.plusone.system.domain.model.account; import java.util.Objects; import java.util.regex.Pattern; +import javax.annotation.Nullable; + import cn.hutool.core.util.DesensitizedUtil; import xyz.zhouxy.plusone.commons.annotation.StaticFactoryMethod; +import xyz.zhouxy.plusone.commons.annotation.ValueObject; import xyz.zhouxy.plusone.commons.constant.PatternConsts; /** @@ -12,19 +15,13 @@ import xyz.zhouxy.plusone.commons.constant.PatternConsts; * * @author ZhouXY */ -public class Email extends Principal { +@ValueObject +public final class Email extends Principal { public static final Pattern REGEX = PatternConsts.EMAIL; private Email(String email) { - super(REGEX); - if (email == null) { - throw new IllegalArgumentException("邮箱地址不能为空"); - } - this.value = email; - if (!isValid()) { - throw new IllegalArgumentException("邮箱地址格式错误"); - } + super(email, REGEX); } @StaticFactoryMethod(Email.class) @@ -33,19 +30,13 @@ public class Email extends Principal { } @StaticFactoryMethod(Email.class) + @Nullable public static Email ofNullable(String email) { return Objects.nonNull(email) ? new Email(email) : null; } - /** - * 脱敏后的数据 - */ - public String safeValue() { - return DesensitizedUtil.email(this.value); - } - @Override - public String toString() { - return this.safeValue(); + public String safeValue() { + return DesensitizedUtil.email(value()); } } diff --git a/plusone-system/plusone-system-domain/src/main/java/xyz/zhouxy/plusone/system/domain/model/account/MobilePhone.java b/plusone-system/plusone-system-domain/src/main/java/xyz/zhouxy/plusone/system/domain/model/account/MobilePhone.java index 15a3692..0542611 100644 --- a/plusone-system/plusone-system-domain/src/main/java/xyz/zhouxy/plusone/system/domain/model/account/MobilePhone.java +++ b/plusone-system/plusone-system-domain/src/main/java/xyz/zhouxy/plusone/system/domain/model/account/MobilePhone.java @@ -3,8 +3,11 @@ package xyz.zhouxy.plusone.system.domain.model.account; import java.util.Objects; import java.util.regex.Pattern; +import javax.annotation.Nullable; + import cn.hutool.core.util.DesensitizedUtil; import xyz.zhouxy.plusone.commons.annotation.StaticFactoryMethod; +import xyz.zhouxy.plusone.commons.annotation.ValueObject; import xyz.zhouxy.plusone.commons.constant.PatternConsts; /** @@ -12,19 +15,13 @@ import xyz.zhouxy.plusone.commons.constant.PatternConsts; * * @author ZhouXY */ +@ValueObject public class MobilePhone extends Principal { public static final Pattern REGEX = PatternConsts.MOBILE_PHONE; private MobilePhone(String mobilePhone) { - super(REGEX); - if (mobilePhone == null) { - throw new IllegalArgumentException("手机号不能为空"); - } - this.value = mobilePhone; - if (!isValid()) { - throw new IllegalArgumentException("手机号格式错误"); - } + super(mobilePhone, REGEX); } @StaticFactoryMethod(MobilePhone.class) @@ -33,16 +30,13 @@ public class MobilePhone extends Principal { } @StaticFactoryMethod(MobilePhone.class) + @Nullable public static MobilePhone ofNullable(String mobilePhone) { return Objects.nonNull(mobilePhone) ? new MobilePhone(mobilePhone) : null; } - public String safeValue() { - return DesensitizedUtil.mobilePhone(this.value); - } - @Override - public String toString() { - return this.safeValue(); + public String safeValue() { + return DesensitizedUtil.mobilePhone(this.value()); } } diff --git a/plusone-system/plusone-system-domain/src/main/java/xyz/zhouxy/plusone/system/domain/model/account/Nickname.java b/plusone-system/plusone-system-domain/src/main/java/xyz/zhouxy/plusone/system/domain/model/account/Nickname.java index d1964b2..e268aa0 100644 --- a/plusone-system/plusone-system-domain/src/main/java/xyz/zhouxy/plusone/system/domain/model/account/Nickname.java +++ b/plusone-system/plusone-system-domain/src/main/java/xyz/zhouxy/plusone/system/domain/model/account/Nickname.java @@ -4,27 +4,22 @@ import java.util.Objects; import java.util.regex.Pattern; import xyz.zhouxy.plusone.commons.annotation.StaticFactoryMethod; +import xyz.zhouxy.plusone.commons.annotation.ValueObject; import xyz.zhouxy.plusone.commons.constant.PatternConsts; -import xyz.zhouxy.plusone.domain.ValidatableStringRecord; +import xyz.zhouxy.plusone.commons.domain.ValidatableStringRecord; /** * 值对象:昵称 * * @author ZhouXY */ +@ValueObject public class Nickname extends ValidatableStringRecord { public static final Pattern REGEX = PatternConsts.NICKNAME; private Nickname(String value) { - super(REGEX); - if (value == null) { - throw new IllegalArgumentException("昵称不能为空"); - } - this.value = value; - if (!isValid()) { - throw new IllegalArgumentException("昵称格式错误"); - } + super(value, REGEX); } @StaticFactoryMethod(Nickname.class) diff --git a/plusone-system/plusone-system-domain/src/main/java/xyz/zhouxy/plusone/system/domain/model/account/Principal.java b/plusone-system/plusone-system-domain/src/main/java/xyz/zhouxy/plusone/system/domain/model/account/Principal.java index c4a4701..4cf0463 100644 --- a/plusone-system/plusone-system-domain/src/main/java/xyz/zhouxy/plusone/system/domain/model/account/Principal.java +++ b/plusone-system/plusone-system-domain/src/main/java/xyz/zhouxy/plusone/system/domain/model/account/Principal.java @@ -2,15 +2,23 @@ package xyz.zhouxy.plusone.system.domain.model.account; import java.util.regex.Pattern; -import xyz.zhouxy.plusone.domain.ValidatableStringRecord; +import xyz.zhouxy.plusone.commons.domain.ValidatableStringRecord; +import xyz.zhouxy.plusone.domain.IValueObject; /** * 账号标识符 * * @author ZhouXY */ -public abstract class Principal extends ValidatableStringRecord { - protected Principal(Pattern format) { - super(format); +public abstract class Principal extends ValidatableStringRecord implements IValueObject { + protected Principal(String principal, Pattern pattern) { + super(principal, pattern); + } + + protected abstract String safeValue(); + + @Override + public final String toString() { + return this.safeValue(); } } diff --git a/plusone-system/plusone-system-domain/src/main/java/xyz/zhouxy/plusone/system/domain/model/account/Username.java b/plusone-system/plusone-system-domain/src/main/java/xyz/zhouxy/plusone/system/domain/model/account/Username.java index 92b1420..25446b1 100644 --- a/plusone-system/plusone-system-domain/src/main/java/xyz/zhouxy/plusone/system/domain/model/account/Username.java +++ b/plusone-system/plusone-system-domain/src/main/java/xyz/zhouxy/plusone/system/domain/model/account/Username.java @@ -3,6 +3,7 @@ package xyz.zhouxy.plusone.system.domain.model.account; import java.util.regex.Pattern; import xyz.zhouxy.plusone.commons.annotation.StaticFactoryMethod; +import xyz.zhouxy.plusone.commons.annotation.ValueObject; import xyz.zhouxy.plusone.commons.constant.PatternConsts; /** @@ -10,23 +11,23 @@ import xyz.zhouxy.plusone.commons.constant.PatternConsts; * * @author ZhouXY */ +@ValueObject public class Username extends Principal { public static final Pattern REGEX = PatternConsts.USERNAME; private Username(String username) { - super(REGEX); - if (username == null) { - throw new IllegalArgumentException("用户名不能为空"); - } - this.value = username; - if (!isValid()) { - throw new IllegalArgumentException("用户名格式错误"); - } + super(username, REGEX); } @StaticFactoryMethod(Username.class) public static Username of(String username) { return new Username(username); } + + @Override + protected String safeValue() { + // 不需要脱敏。 + return value(); + } }