AccountInfo 的构建使用 Builder 模式。
This commit is contained in:
@@ -93,11 +93,19 @@ public class Account extends AggregateRoot<Long> implements IWithVersion {
|
||||
}
|
||||
|
||||
public void setAccountInfo(Nickname nickname, URL avatar, Sex sex) {
|
||||
this.accountInfo = AccountInfo.of(nickname, avatar, sex);
|
||||
this.accountInfo = AccountInfo.builder()
|
||||
.nickname(nickname)
|
||||
.avatar(avatar)
|
||||
.sex(sex)
|
||||
.build();
|
||||
}
|
||||
|
||||
public void setAccountInfo(String nickname, String avatar, Sex sex) {
|
||||
this.accountInfo = AccountInfo.of(nickname, avatar, sex);
|
||||
this.accountInfo = AccountInfo.builder()
|
||||
.nickname(nickname)
|
||||
.avatar(avatar)
|
||||
.sex(sex)
|
||||
.build();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -5,7 +5,9 @@ import java.net.URL;
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
|
||||
import lombok.Getter;
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
import lombok.ToString;
|
||||
import xyz.zhouxy.plusone.domain.IValueObject;
|
||||
|
||||
@@ -17,30 +19,19 @@ import xyz.zhouxy.plusone.domain.IValueObject;
|
||||
@ToString
|
||||
public class AccountInfo implements IValueObject {
|
||||
|
||||
@Nullable
|
||||
private final Nickname nickname;
|
||||
@Nullable
|
||||
private final URL avatar;
|
||||
private final @Getter Sex sex;
|
||||
@Nonnull
|
||||
private final Sex sex;
|
||||
|
||||
private AccountInfo(Nickname nickname, URL avatar, Sex sex) {
|
||||
private AccountInfo(@Nullable Nickname nickname, @Nullable URL avatar, @Nullable Sex sex) {
|
||||
this.nickname = nickname;
|
||||
this.avatar = avatar;
|
||||
this.sex = Objects.nonNull(sex) ? sex : Sex.UNSET;
|
||||
}
|
||||
|
||||
public static AccountInfo of(Nickname nickname, URL avatar, Sex sex) {
|
||||
return new AccountInfo(nickname, avatar, sex);
|
||||
}
|
||||
|
||||
public static AccountInfo of(String nickname, String avatar, Sex sex) {
|
||||
URL avatarURL;
|
||||
try {
|
||||
avatarURL = Objects.nonNull(avatar) ? new URL(avatar) : null;
|
||||
} catch (MalformedURLException e) {
|
||||
throw new IllegalArgumentException(e);
|
||||
}
|
||||
return new AccountInfo(Nickname.ofNullable(nickname), avatarURL, sex);
|
||||
}
|
||||
|
||||
public Optional<Nickname> getNickname() {
|
||||
return Optional.ofNullable(nickname);
|
||||
}
|
||||
@@ -48,4 +39,54 @@ public class AccountInfo implements IValueObject {
|
||||
public Optional<URL> getAvatar() {
|
||||
return Optional.ofNullable(avatar);
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
public Sex getSex() {
|
||||
return this.sex;
|
||||
}
|
||||
|
||||
// Builder
|
||||
|
||||
public static Builder builder() {
|
||||
return new Builder();
|
||||
}
|
||||
|
||||
public static class Builder {
|
||||
private Nickname nickname;
|
||||
private URL avatar;
|
||||
private Sex sex;
|
||||
|
||||
public Builder nickname(@Nullable Nickname nickname) {
|
||||
this.nickname = nickname;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder nickname(@Nullable String nickname) {
|
||||
return nickname(Nickname.ofNullable(nickname));
|
||||
}
|
||||
|
||||
public Builder avatar(@Nullable URL avatar) {
|
||||
this.avatar = avatar;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder avatar(@Nullable String avatar) {
|
||||
URL avatarURL;
|
||||
try {
|
||||
avatarURL = Objects.nonNull(avatar) ? new URL(avatar) : null;
|
||||
} catch (MalformedURLException e) {
|
||||
throw new IllegalArgumentException(e);
|
||||
}
|
||||
return avatar(avatarURL);
|
||||
}
|
||||
|
||||
public Builder sex(@Nullable Sex sex) {
|
||||
this.sex = sex;
|
||||
return this;
|
||||
}
|
||||
|
||||
public AccountInfo build() {
|
||||
return new AccountInfo(this.nickname, this.avatar, this.sex);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -1,5 +1,7 @@
|
||||
package xyz.zhouxy.plusone.system.domain.model.account;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
|
||||
import xyz.zhouxy.plusone.commons.util.Enumeration;
|
||||
import xyz.zhouxy.plusone.domain.IValueObject;
|
||||
|
||||
@@ -9,8 +11,11 @@ import xyz.zhouxy.plusone.domain.IValueObject;
|
||||
* @author <a href="https://gitee.com/zhouxy108">ZhouXY</a>
|
||||
*/
|
||||
public class Sex extends Enumeration<Sex> implements IValueObject {
|
||||
@Nonnull
|
||||
public static final Sex UNSET = new Sex(0, "未设置");
|
||||
@Nonnull
|
||||
public static final Sex MALE = new Sex(1, "男性");
|
||||
@Nonnull
|
||||
public static final Sex FEMALE = new Sex(2, "女性");
|
||||
|
||||
private Sex(int value, String name) {
|
||||
|
Reference in New Issue
Block a user