Spring/spring_old
04. Data class 등 관련 코딩-01
slow333
2023. 1. 19. 15:59
Data class 패키지 : aggregate 패키지 구성
package spring.study.aggregate;
import lombok.Getter;
import lombok.Setter;
import java.util.UUID;
@Getter
@Setter
public abstract class Entity { // 상속 관계에서 부모로만 작동함
String id;
public Entity(){
this.id = UUID.randomUUID().toString();
}
public Entity(String id) {
this.id = id;
}
}
package spring.study.aggregate.club.vo;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
@Setter
@Getter
@NoArgsConstructor
public class Address {
AddressType addressType;
String country;
String streetAddress;
String zipAddress;
String zipCode;
public Address(String zipCode, String zipAddress, String streetAddress) {
this.zipCode = zipCode;
this.zipAddress = zipAddress;
this.streetAddress = streetAddress;
this.country = "대한민국";
this.addressType = AddressType.Home;
}
@Override
public String toString() {
return "Address{" +
"addressType=" + addressType +
", country=" + country + ", zipCode=" + zipCode +
", zipAddress='" + zipAddress + ", streetAddress='" + streetAddress + '}';
}
public static Address sampleHomeAddress(){
return new Address("302-775", "주소 값", "세부 주소");
}
public static Address sampleOfficeAddress(){
return new Address("모름", "주소", "2층");
}
public static void main(String[] args) {
System.out.println(sampleHomeAddress());
}
package spring.study.aggregate.club.vo;
public enum AddressType {
Home,
Office
}
public enum RoleInClub {
Admin,
Member,
President
}
Club
@NoArgsConstructor
public class Club extends Entity {
private final static int MIN_INTRO_LENGTH = 10;
private final static int MIN_NAME_LENGTH = 4;
private String name;
private String intro;
private String foundationTime;
public Club(String id) {
super(id);
}
public Club(String name, String intro) {
super();
setName(name);
setIntro(intro);
this.foundationTime = LocalDateTime.now().format(DateTimeFormatter.ISO_LOCAL_DATE);
}
public String getName() {
return name;
}
public void setName(String name) {
if (name.length() < MIN_NAME_LENGTH) {
throw new IllegalStateException("이름 길이가 " + MIN_NAME_LENGTH + "보다 커야 합니다.");
}
this.name = name;
}
public String getIntro() {
return intro;
}
public void setIntro(String intro) {
if (intro.length() < MIN_INTRO_LENGTH) {
throw new IllegalStateException("소개 글은 길이가 " + MIN_INTRO_LENGTH + "보다 커야 합니다.");
}
this.intro = intro;
}
public String getFoundationTime() {
return foundationTime;
}
public void setFoundationTime(String foundationTime) {
this.foundationTime = foundationTime;
}
///** 위의 방식 보다 좀 복잡하고 설정시 적용이 안됨.. 왜 이렇게 했지 ???
private void checkNameValidation(String name) {
//
if (name.length() < Club.MIN_NAME_LENGTH) {
throw new IllegalArgumentException("\t > Name should be longer than " + Club.MIN_NAME_LENGTH);
}
}
private void checkIntroValidation(String intro) {
//
if (intro.length() < Club.MIN_INTRO_LENGTH) {
throw new IllegalArgumentException("\t > Intro should be longer than " + Club.MIN_INTRO_LENGTH);
}
}
public void checkValidation(){
checkNameValidation(name);
checkIntroValidation(intro);
}
// 서비스를 생성할때 변경해야 할 항목을 정하는 것임
public void modifyValues(NameAndValueList nameValues) {
//
for (NameAndValue nameValue : nameValues.getList()) {
String value = nameValue.getValue();
switch (nameValue.getName()) {
case "name":
checkNameValidation(value);
this.name = value;
break;
case "intro":
checkIntroValidation(value);
this.intro = value;
break;
}
}
}
@Override
public String toString() {
return "Club{ 이름='" + name + ", 소개='" + intro + '\'' +
", 설립일='" + foundationTime + '}';
}
public static Club sampleClub(){
return new Club("spring club", "처음으로 생성하는 클럽 입니다.");
}
public static void main(String[] args) {
System.out.println(sampleClub());
}
}
Member
@Getter
@Setter
public class Member extends Entity {
String email; //중복 안됨, key
String name;
String phoneNumber;
String birthDay;
String nickName;
List<Address> addresses;
public Member(){
super();
this.addresses = new ArrayList<>();
}
public Member(String id) {
super(id);
}
public Member(String email, String name, String phoneNumber, String nickName, String birthDay) {
this();
this.email = email;
this.name = name;
this.phoneNumber = phoneNumber;
this.birthDay = birthDay;
this.nickName = nickName;
checkEmail(); // email 유효성 검사.. 중복 검사는 어디 에서 하지
}
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append("이름:").append(name);
builder.append(", email:").append(email);
builder.append(", 별명:").append(nickName);
builder.append(", 전번:").append(phoneNumber);
builder.append(", 생일:").append(birthDay);
if (addresses != null) {
int i = 1;
for (Address address : addresses) {
builder.append(", Address[").append(i++).append("]").append(address.toString());
}
}
return builder.toString();
}
public void checkEmail(){
checkEmailValidation(email);
}
// 변경된 값을 찾아서 update 하는데 필요(????)
public void modifyValues(NameAndValueList nameValues) {
//
for (NameAndValue nameValue : nameValues.getList()) {
String value = nameValue.getValue();
switch (nameValue.getName()) {
case "email":
this.email = value;
break;
case "name":
this.name = value;
break;
case "phoneNumber":
this.phoneNumber = value;
break;
case "nickName":
this.nickName = value;
break;
case "birthDay":
this.birthDay = value;
break;
}
}
}
private void checkEmailValidation(String email) {
String emailPattern = "^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$";
Pattern p = Pattern.compile(emailPattern);
Matcher m = p.matcher(email);
boolean valid = m.matches();
if (!valid) {
throw new InvalidParameterException("이메일 이름 형식이 좀 그러 내요");
}
}
public static Member sample() {
Member member = new Member("myvms@vms.com", "저녁은 뭐지?", "010-3321-1001","fishburn","2004.02.22");
member.setBirthDay("2003.01.07");
member.getAddresses().add(Address.sampleHomeAddress());
member.getAddresses().add(Address.sampleOfficeAddress());
return member;
}
public static void main(String[] args) {
//
System.out.println(sample().toString());
}
}
Membership
@Getter
@Setter
public class Membership extends Entity {
String clubId; // 중복 허용 안함
String memberId;
RoleInClub role;
String joinDate;
public Membership(String id) {
super(id);
}
public Membership(){
super();
}
public Membership(String clubId, String memberId) {
this.clubId = clubId;
this.memberId = memberId;
this.role = RoleInClub.Member;
this.joinDate = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"));;
}
@Override
public String toString() {
return "Membership{ clubId='" + clubId +
", memberId='" + memberId + '\'' +
", role=" + role +", joinDate='" + joinDate + '}';
}
public void modifyValues(NameAndValueList nameValueList) {
for (NameAndValue nameValue : nameValueList.getList()) {
String value = nameValue.getValue();
switch (nameValue.getName()) {
case "role":
this.role = RoleInClub.valueOf(value);
break;
}
}
}
public static Membership sampleMembership(){
return new Membership(
Club.sampleClub().getId(), Member.sample().getId()
);
}
public static void main(String[] args) {
System.out.println(sampleMembership());
}
}