쿠폰 일종의 엔티티를 디자인 할 필요가 있습니다. 사용 예정일 속성이 있습니다. 문제는 기한이 사용자가 쿠폰을받은 후 60 일과 같이 특정 날짜가 할당되거나 계산 된 날짜 일 수 있다는 것입니다. 그래서 내 질문은 어떻게 다른 쿠폰의 기한을 쉽게 얻을 수 있도록이 요구 사항을 충족시키기 위해 쿠폰 엔티티를 디자인 할 수 있습니까? 모든 제안을 주시면 감사하겠습니다.엔티티 디자인 제안
다음은 예입니다. 지금 나는 User
과 Coupon
의 두 엔티티와이 두 객체의 관계 엔티티를 가지고 있습니다.
@Entity
@Table(name = "user")
public class User {
@Id
@GeneratedValue
private Long id;
private String name;
// ....
}
@Entity
@Table(name = "coupon")
public class Coupon {
@Id
@GeneratedValue
private Long id;
private Date dueDate;
private Integer periodDays;
// ...
}
@Entity
@Table(name = "user_coupon")
public class UserCoupon {
@Id
@GeneratedValue
private Long id;
@ManyToOne(fetch = FetchType.Lazy, optional = false)
private User user;
@ManyToOne(fetch = FetchType.Lazy, optional = false)
private Coupon coupon;
private Date dueDate;
/**
* Constructor
*/
public UserCoupon(User user, Coupon coupon) {
this.user = user;
this.coupon = coupon;
if (coupon.getDueDate() != null) {
this.dueDate = coupon.getDueDate();
} else if (coupon.getPeriodDays() != null) {
this.dueDate = DateUtils.addDays(new Date(), coupon.getPeriodDays());
}
}
// ....
}
dueDate
과 Coupon
클래스 작성 periodDays
비즈니스 로직에 의해 mutualyl 배타적입니다. 즉, 쿠폰은 사용자가 쿠폰을 받으면 만기일을 계산하기 위해 고정 만기 날짜 또는 정수 속성 (periodDays
)을가집니다.
오른쪽 지금은 Coupon
클래스에서 모두 2 개 필드를 넣을 수 있습니다,하지만 난 UserCoupon
클래스의 dueDate
필드를 설정해야 할 때, 나는 Coupon
에서 상호 배타적 필드의 어떤을 확인하는 것이 조금 지루하고 불편 발견 클래스는 null
이고 마지막으로 UserCoupon
클래스의 dueDate
을 계산합니다 (UserCoupon
클래스 생성자 참조).
따라서 기한을 계산할 때 지루한 필드 Null 검사를 피할 수있는 좋은 엔티티 디자인 전략이 있는지 알고 싶습니다. Coupon
클래스의 2 개의 필드가 동시에 배타적인지 확인하십시오. 코드가 아니라 비즈니스 로직에 의해.
질문에 약간의 차이가 있습니다. 아마도 당신의 시도를 (심지어 의사 코드로) 추가하여 당신이 달성하고자하는 것을 보여줄 수 있습니다. – user1803551
@ user1803551 몇 가지 코드와 내 질문에 대한 자세한 설명을 추가했습니다. 그것이 당신에게 분명 희망입니다. :) – lute
'dueDate'와'periodDays'를 기반으로'dueDate' 값을 계산하는'Coupon' 메서드를 만들 수 없습니까? – user1803551