iteye_20670 2009-04-22 23:08
浏览 161
已采纳

关于service 层的设计和hibernate中实体的在页面中的传递

这几天在研究些项目,我看的是Struts2 的权威指南的最后一个项目。有几点疑问,有点搞不清楚,请教下大家 :D

1、关于service层的设计,有没必要把service 层设计成接口,然后再具体实现。
比如:UserService 有没必要设计成接口,然后再用 UserServiceImp 把它具体实现,书上是这么设计的,我感觉好像没什么必要,直接用UserService 实现具体的业务操作就行了,实现接口有点多余。。

这有的设计service层的设计原则,一般项目中的service层是怎么设计的呢,一个种类的相关操作对应一个service类??
比如:对User的相关操作对应一个UserService类

2、关于hibernate中实体的在页面中的传输。
具体很难说清楚,还是举个例子说明下清楚点,比如:
Class User{
private String id;
private String name;
private Address address;
}
Class Address{
private String name;
private String code;
}

在hibernate 查询中,如果设置了lazy 的话,当加载User类的时候,Address是不是立即执行查询的。。问题的关键在于,如果我把一个User类的List传输到页面,然后逐个输出User,包括要取出Address里的内容,然而hibernate 的session 已经关闭了,是不能取出Address的,会报错,这时可以采取OpenSessionInView 机制,这样就可以顺利取出的。或者把lazy 设成false,这样也可以取出来了。

还有个办法,我是在书上项目中的书看到的,就是在hibernate session没关闭之前,把Address取出来,新建个UserBean类
Class UserBean{
//把User 的属性都封装进来
private String username;
private String userId;
//把Address 的属性都封装进来
priavte String addressName;
private String code;
}

然后把UserBean 的List 传输到 页面,这样就不会在页面上用到hibernate 的session了。。

开始看到UserBean类的时候有点糊涂了,后来知道了他的作用后,觉得这样做好像有点麻烦,项目中又会多了一个UserBean类,但对于解决页面的实体的传输问题确实是个解决的办法。。
对于这种做法,在项目中常不常见呢,到底真正项目中,是怎么来解决这个问题的。OpenSessionInView??还是用UserBean这个方法??或者其他???
[b]问题补充:[/b]
稍微补充下,除了用到 OpenSessionInView或UserBean的方式,还有没其他方式呢。。
或许更合理些的,这两种方法我觉得都有点缺点。。

  • 写回答

3条回答 默认 最新

  • wanghaolovezlq 2009-04-23 09:02
    关注

    面向接口编程,这是优秀的编码方式,基本上的公司都是这么做的,这可以降低耦合嘛,
    依赖于接口而不依赖于具体实现类,接口可以有多个实现类,运行时就可以多态替换了
    对于小项目也许接口有点多余,但大项目一定都是接口的。

    真实的项目中OpenSessionInView或UserBean的方式都有可能,要看项目的实际需求了,看什么方式最合适当前的系统需求,这才是最佳实践

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥200 uniapp长期运行卡死问题解决
  • ¥15 latex怎么处理论文引理引用参考文献
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?
  • ¥15 乘性高斯噪声在深度学习网络中的应用