簡體   English   中英

在Customer類中存儲當前選定的付款信息

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM