簡體   English   中英

Java / Spring:視圖的豆子

[英]Java/Spring: Beans for the View

我陷入兩難境地,我不確定開始解決它的最佳方法。

我正在使用舊的代碼庫。 一些域對象(以及它們后面的db表)沒有多大意義。 例如, deleted存儲為longage存儲為String等。我已經能夠正常工作。 在視圖中我可以說if (deleted == 1)... 但是有一些特定的業務邏輯通過將其置於視圖中而導致維護問題。 這是一個例子:

String title = null;
if (obj.getTitle != null) {
    title = obj.getTitle();
} else {
    title = obj.getName() + " - " + obj.getCategory();
}

我真的希望有一個“視圖bean”,這個業務邏輯和合法的怪異被解決和存儲,以便我可以在多個視圖中使用它,但然后在一個地方更改它。 如果我有一個Product POJO然后我的ProductViewBean ,作為一個例子,我會做類似的事情:

productViewBean.setDeleted( product.getDeleted() == 1 );
productViewBean.setTitle( product.getTitle() != null ? product.getTitle() : product.getName() + " - " + product.getCategory() );

我的問題是,我應該在哪里這樣做? 我應該有一個manager (注入適當的daos )注入我的controller並返回我的“視圖bean”嗎? 或者我認為這一切都錯了,有沒有更好的方法呢?

提前致謝

(注意:我理解底層結構是真正的問題,但是在這一點上更改我的管轄范圍。太多項目使用這些域對象。即使我確實清理了db / domain對象(所以deleted一個boolean等)我仍然留下不可避免的業務邏輯(如果!標題然后'從其他組件構建標題')不屬於數據層並且我想封裝在一個地方,這樣控制器都沒有或者視圖必須擔心它,它可以在多個控制器/視圖中使用。我碰巧在某些地方我可以編寫一些高效且可維護的東西,甚至可以創建一個很好的層來簡化這些域對象的清理。未來。)

我敢打賭,你可以在Spring數據綁定和驗證API中對它進行排序。

我還說你應該有一個與Web控制器層不同的服務層。 將服務注入Web層,讓他們完成所有工作。 他們擔心工作單元,事務和DAO對象。

我會嘗試一個適配器委托給域對象,如下所示。 控制器和視圖使用這個。 如果ProductViewBean與管理器位於同一個包中,則管理器只能使用getDelegate()方法將其傳遞給dao。

public class ProductViewBean {
  private final Product delegate;

  public ProductViewBean(Product delegate) {
    this.delegate = delegate;
  }

  Product getDelegate() {
    return delegate;
  }

  public String getTitle() {
    if (delegate.getTitle == null) {
      return delegate.getName() + " - " + delegate.getCategory();
    }
    return delegate.getTitle();
  }

  public void setTitle(String title) {
    delegate.setTitle(title);
  }

  public boolean isDeleted() {
    return delegate.getDeleted() == 1L;
  }

  public void setDeleted(boolean deleted) {
    delegate.setDeleted(deleted ? 1L : 0L);
  }

  ...
}

所以你可以制作你喜歡的API。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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