2011-01-21 66 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