在应用程序中处理静态引用数据的最佳方法(MVVM)

时间:2016-08-04 16:46:51

标签: java database jpa mvvm constants

我们说我有一个应用程序允许参与者注册,然后支付服务。我必须处理付款状态

使用数据库,我会通过创建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 堆栈,更少的代码,更好的性能(没有数据库访问,更少的网络传输)。

即使使用数据库解决方案,它仍然是依赖代码,因为我必须初始化该值。所以我在可维护性方面没有获得很大的优势?

您怎么看?

0 个答案:

没有答案