论坛首页 Java企业应用论坛

对象(Object)、数据对象、功能对象与JavaBean,HibernateEntityBean的命名经验

浏览 1875 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-05-05  
对象(Object)、数据对象、功能对象与JavaBean,HibernateEntityBean的命名经验

为了不引起用途的混乱,将Object根据用途划分为数据对象和功能对象。

一种数据类型,一个系统可以有很多不同应用层次的数据对象,比如HibernatePOJO/PO、DTO、FormBean、VO。

在某高效的B/S系统中,将数据对象的各个应用层次数据对象设计成只有HibernateEntityBean。

什么是HibernateEnitiyBean: Object概念 > JavaBean概念,JavaBean有JavaBean的属性、getter/setter命名规则,Hibernate支持POJO,而符合JavaBean属性、getter/setter的HibernatePOJO,称之HibernateEntityBean。

为什么高效:
JavaBean使用、命名规则和使用规限,在Java世界广泛存在,所以Object属性和方法的命名要尽量符合JavaBean的规则,才能流畅通行。

为什么高效:
不在各个层次的类型转换来转换去,从而省大量代码。
不用在各个层次的类型转换来转换去,怎样兼顾成本和扩展性:
HibernateEntityBean或一些内部能正常使用的Bean/Object不能在远过程调用(WebService/RMI/Corba/RPC)中直接传输,所以需要转换
在内部使用和与外部联系的重要性中,以内部使用为重要和使用频繁,所以内部以HibernateEntityBean为主,而另外定义远过程调用所用的DTO,成本也不大,而不用全盘根据远过程调用的需要而定义大量的DTO。
而在MVC内部结构中,大多数可以直接采用HibernateEntityBean在MVC各层次内传输,除非您设计得不能直接传输或您采用的MVC技术有限制。

怎样更高效:
在只有一层数据对象状况下的HibernateEntityBean要承担起对象的一些概念,而其功能不只拘泥于数据表字段。
比如remark的数据表功能有public int getScore()对应与字段score
不妨可以有:
public String getScoreDesc()
{
    String scoreDesc="";
    if(score==5)
        scoreDesc="中评";
    else if(score=8)
        scoreDesc="好评";
    else if(score=3)
        scoreDesc="差评";
    return scoreDesc;
}

兼顾不同需要或不同角色的角度,不妨加多一个函数:
public String getScoreDesc2()
{
    String scoreDesc="";
    if(score<=3)
        scoreDesc="不及格";
    else if(score>=3 && score<=6)
        scoreDesc="及格";
    else if(score>6)
        scoreDesc="优秀";
    return scoreDesc;
}

这样可以在View层和EL中省大量代码,如果remark.scoreDesc/remark.scoreDesc2不合要求,直接用remark.score进行自主处理也是可以的。

这些不从数据表由来的方法,应不要输入参数,只利用到内部field和硬编码,应符合对象的概念,不要操作数据群体,即只有getXXX(),getXXX()里不要再发出数据库操作(如果处理得好,为了高效也是可以的)
这些方法要符合JavaBean的属性命名规则,让其更广泛通用。

更多:
在getXXX()不进行数据库操作时,也可以这样处理,比如Restaurant只关联到userId,而没关联到user对象,不妨增加:
private String userName="";
public String getUserName()
public void setUserName(String userName)

在Controller方法里取得restaurantList后,不妨对该列表的每个元素通过数据库操作取用户名后调用setUserName()。
View层对同一个restaurantList操作就能显示结果。
这样也省下处理更复杂数据结构的时间,而且代码也算规整。

如上userName,有时候不妨给field赋个初始化值,避免null异常,因为试用人员看到没显示好数据时会直接指出哪个数据没显示好,而当他看到一堆异常时,则他的意见是帮不到具体的。

总之,在代码大结构不会乱、能受控制的情况下,思想不妨活一些。
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics