[英]storing currently selected payment info in Customer class
我需要存儲customer
當前選擇的payment
信息,以便此信息可用於處理購買。客戶可以擁有多張信用卡。所以我將其建模為OneToMany
關系。我對存儲當前所選付款感到懷疑info作為一個不同的字段(如下所示)。並排Set<Payment>
和Payment
字段,看起來不太合適。
有沒有更好的方法呢?可以使用一些標志來標記這是當前選擇的卡片信息
@Entity
class Customer{
...
@OneToMany( cascade=CascadeType.ALL,orphanRemoval=true)
Set<Payment> payments;
Payment currentlySelectedPayment;//?
}
@Entity
@Table(uniqueConstraints=@UniqueConstraint(columnNames={"cardType","cardNumber"}))
public class Payment{
...
String cardType;
String cardNumber;
String nameOnCard;
...
Date dateOfExpiry;//day,month,year of expiry
}
我將業務邏輯實現為
void addNewCard(...){
Payment payment = get_from_db_or_create_new_payment(...);
if(!customer.getPayments().contains(payment) ){
customer.getPayments().add(payment);
}
...
}
void setCurrentlySelectedPaymentForCustomer(Long paymentId,..){
Payment payment = getPaymentFromDB(paymentId);
if(!customer.getCurrentlySelectedPayment().equals(payment)){
customer.setCurrentlySelectedPayment(payment);
}
...
}
我沒有看到任何設計問題。 您需要將付款添加到付款集。 之后,您需要將所選付款分配給客戶。
如果您使用的是套裝,則無需使用:
if(!customer.getPayments().contains(payment) ){
因為Set不允許添加重復的元素。
我也沒有理由這樣做:
if(!customer.getCurrentlySelectedPayment().equals(payment)){
您可以設置它,而不需要評估currentSelectedPayment是否不相等。
我遇到過類似的情況,你需要首先將元素添加到父元素,然后將其中一個元素分配給父元素之一。 我解決它的方式是你做的方式,而不是在孩子們有一個標志(真/假屬性)。
我認為你這樣做是正確的方法。 我認為在這種情況下,例如在Payment中名為selectedPayment的屬性的標志不是該對象的適當屬性。 為什么? 因為first是Customer的屬性而不是Payment本身。 其次,當您想要更改selectedPayment時,您需要從子對象獲取selectedPayment,刪除該標志並將標志分配給新子項,如果您只是在父項中創建屬性,則可以避免許多步驟。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.