我们说我有一个应用程序允许参与者注册,然后支付服务。我必须处理付款状态。
使用数据库,我会通过创建2个表来区分参考数据与主数据:
--------------------------------------------- -----------------
PARTICIPANT PAYMENT_STATUS
--------------------------------------------- -----------------
ID FIRSTNAME LASTNAME PAYMENT_STATUS_ID ID NAME
1 John McClane 1 1 paid
2 Lara Croft 2 2 not paid
3 Marty McFly 1 3 waiting
4 Ellen Ripley 3 -----------------
---------------------------------------------
在我的申请中,我需要:
我必须创建所有 MVVM 堆栈(类和方法)。
我想知道是否可接受简单地使用"常数"类而不是将数据存储到数据库中,因此所有代码都将成为:
//AppConstants.java
public static final String PAYMENT_STATUS_VALIDATED = "paid";
public static final String PAYMENT_STATUS_NOT_VALIDATED = "not paid";
public static final String PAYMENT_STATUS_WAITING = "waiting";
public static final List<String> PAYMENT_STATUS_LIST = Arrays.asList(
PAYMENT_STATUS_VALIDATED,
PAYMENT_STATUS_NOT_VALIDATED,
PAYMENT_STATUS_WAITING
);
//AdminVm.java
public List<PaymentStatus> getPaymentStatusList() {
return AppContants.PAYMENT_STATUS_LIST
}
//RegisterVm.java
public void register() {
Participant newPart = new Participant();
newPart.setPaymentStatus(AppContants.PAYMENT_STATUS_NOT_PAID));
}
而不是:
//PaymentStatus
@Entity
@Table(name = "payment_status")
public class PaymentStatus {
[...]
}
//PaymentStatusManager
public List<PaymentStatus> getAll() {
return paymentStatusDao.getAll();
}
public PaymentStatus getPaymentStatusByName(String str) {
return paymentStatusDao.getPaymentStatusByName(str);
}
//PaymentStatusDao
public PaymentStatus getPaymentStatusByName(String str);
public List<PaymentStatus> getAll();
//PaymentStatusDaoImpl
public PaymentStatus getPaymentStatusByName(String str) {
String queryString = "SELECT p FROM PaymentStatus p WHERE p.text = :str";
Query query = getEntityManager().createQuery(queryString);
query.setParameter("str", str);
if (query.getResultList().size() > 0) {
return (PaymentStatus) query.getResultList().get(0);
} else {
return null;
}
}
public List<PaymentStatus> getAll() {
[...]
}
//AppConstants.java
public static final String PAYMENT_STATUS_NOT_VALIDATED = "not paid";
//AdminVm.java
public List<PaymentStatus> getPaymentStatusList() {
return paymentStatusMgr.getAll();
}
//RegisterVm.java
private PaymentStatusManager paymentStatusMgr;
[...]
public void register() {
Participant newPart = new Participant();
newPart.setPaymentStatus(paymentStatusMgr.getPaymentStatusByName(AppContants.STATUS_PAYMENT_NOT_PAID));
}
它避免了所有 MVVM 堆栈,更少的代码,更好的性能(没有数据库访问,更少的网络传输)。
即使使用数据库解决方案,它仍然是依赖代码,因为我必须初始化该值。所以我在可维护性方面没有获得很大的优势?
您怎么看?