浏览 1875 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-05-05
为了不引起用途的混乱,将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异常,因为试用人员看到没显示好数据时会直接指出哪个数据没显示好,而当他看到一堆异常时,则他的意见是帮不到具体的。 总之,在代码大结构不会乱、能受控制的情况下,思想不妨活一些。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |