2011-01-21 62 views
1

我正在使用Hibernate。它效果很好。但是,假設我有一個對應於只有getter和setter和toString的數據庫表的類,方法相同。現在我想添加一些更多幫助用途的方法,例如,假設我想通過添加一些描述文本來獲取creationdate,如下所示。休眠設計模式問題

public class Client { 
     private long id; 
     private Calendar creationDate; 
     protected String password; 

      public long getId() { 
      return id; 
     } 

     @SuppressWarnings("unused") 
     private void setId(long id) { 
      this.id = id; 
     } 

     public Calendar getCreationDate() { 
      return creationDate; 
     } 

     public void setCreationDate(Calendar creationDate) { 
      this.creationDate = creationDate; 
     } 

     .. 
     .. some other getters and setters that corresponding to SQL columns 

     //Here I would like to have some help methods. Is it recommended to put it here? 
     public String getCreationDateInSecs() { 
      return "Date in secs: " + creationDate.getTimeInMillis * 1000; 
     } 
    } 

問題是:我應該在哪裏放置這種方法?

我應該將它與Value對象添加到同一個類中,還是應該將它放在其他位置?我想知道最好的做法,如果你知道我的意思=)

問候

+0

歐凱,我不知道。謝謝,我會從現在開始=) – kungcc 2011-01-22 09:12:30

+1

@James P.當然沒有義務。這就是爲什麼我用「should」而不是「must」:) @kungcc - 你也可以在你以前的問題上做到這一點。 – Bozho 2011-01-22 09:29:26

+0

不用擔心Bozho。我只是添加到您的回覆:) – 2011-01-23 16:55:47

回答

5

Bozho基本上概述了兩種可能的方法:型號豐富貧血模型,並提出了豐富的模型更OOPish。我會在這裏提倡一種貧血的方法。

您描述的功能看起來像是表示層的責任。我認爲將它放入UI相關的類而不是域模型會更好。

付諸域模型看起來無害,只要邏輯很簡單,只要

return "Date in secs: " + creationDate.getTimeInMillis * 1000; 

然而,假設你有一個額外的要求返回本地化描述。您必須將本地化設施的依賴關係添加到您的域模型,這會增加代碼的耦合度。

因此,最好將不同層的責任分開。

4

絕對沒問題在實體添加方法。它是它所屬的地方,因爲它在對象的內部狀態上運行。

你可以制定一個實用的方法,如ClientUtils.getCreationDateInSeconds(client),但這是非OOP。

0

如果您擔心使用許多方法混合您的實體,並且您有許多DAO方法,那麼您可以考慮使用面向方面的方法。

它將允許您在不破壞面向對象的原則的情況下,在單獨的「方面」中分離純粹的實體內容,DAO內容和其他實用方法。

Spring和AspectJ做得很好。 如果你想要的東西是如何實現一個簡單的例子來看看這裏: http://static.springsource.org/spring-roo/reference/html/architecture.html