论坛首页 Java企业应用论坛

“过度设计”之真实例子

浏览 85166 次
该帖已经被评为新手帖
作者 正文
   发表时间:2011-01-07  
lpn520 写道
downpour 写道
lpn520 写道

通过几天的讨论,其实收获很大,不管是赞同我的也好,还是骂我的也好,我都非常感谢你们,在这里祝大家国庆快乐哦。
我大概的总结一下:

前端:
helloWorld.jsp和helloWorld.js分不分开其实是小问题,爱咋嘀咋嘀。关于对EXT的封装,网友们还是觉得不封装比较好,没有什么争议。

DAO层:
其实ibatis就已经帮我们实现DAO层了,用了ibatis本身在代码里就不用写SQL了,再加上也有泛化的DAO,也没有什么争议。

Service层:
目前争议最大的是Service层,我的观点是struts2的Action可以代替Service,而广大网友的观点是Service必不可少,也有一部份的网友认为,可以用struts2的Action代替Service。 关于这个问题,其实我想问,Service真的是必不可少吗? 是否每个项目都必须要呢? 是因为需求的需要,还是因为它是规范呢? 这个问题有待讨论。 当然我也知道Service层的好处,我曾经的项目也有用到过,正因为我用过,我才敢把它砍掉。





这种分层开发讨论的帖子,应该出现在05年以前,现在再来讨论,并且讨论了25页,实在是让人觉得是一种悲哀。我把帖子投到新手区,希望楼主更多的思考。

我可以简单回答你的几个困惑。

1. DAO层被证明是可以简化的,至少会一个非常薄的层次。在绝大多数的情况下,DAO层是可以省略的,或者使用一个GenericDao的通用设计即可。Javaeye上已经出现过很多通用DAO的尝试,并且非常成功,楼主可以去查找一下。但是当项目成倍扩张后,DAO作为一个独立的层次就显得比较有必要,因为独立的DAO能够从类和接口声明2个不同的角度诠释一个调用的逻辑含义。

2. Service层和Action层被证明是必须独立分开的2个层次。将2个层次分开的原因很多,其中一个重要原因是Service层将被用于事务的隔离,而Action层是不适合作为事务配置的层次。Action是表示层MVC中的Controller,而Service是业务逻辑层的接口表述,所以这两者的职责是完全不同的。把逻辑全部放到

3. 从你们使用EXTJS的情况看,这个与JSP同名的文件的本意可能是用于渲染页面的。这个是否是过度设计要视项目的情况而言。


看了你的评论,我真的,很怀疑你没有认真看我的帖子,或根本没有理解我的本意。
对于开发分层,我只能说现在的分层太形式化了,我只是想革新现在这种过于形式的编程而已。
至于说帖子应该出现在05年以前,我很遗憾的告诉你,05年我还在读书, 至于现在来讨论有何不可呢?技术本来就是一种更新换代的东西,不是一成不变的。
至于希望我更多的思考, 其实我也想叫你思考:据国外的某机构统计,现在的JAVA的B/S开发生产率远不如PHP,可以说JAVA占尽的优势,可会出现这样的结果,这是为什么呢? 你不觉得这个才是悲哀吗?像你这种这么不给晚辈空间的人,以后你儿子可能也会成为你的悲哀。。。

看了你帮我回答的几个困惑,我非常感谢,1、3 这两点我的总结已经写的很清楚了。
关于Service层和Action层被证明是必须独立分开的2个层次,虽然我很赞同你的观点,我以前的几个项目也是这么做的,但也没有达到必须分开的地步,还是要跟项目的实际需求、项目大小及项目开发资源而定。
Action是表示MVC中的Controller,我觉得你真的应该去看看书了,可能你很牛B,不需要看书,但是我还是劝你翻开《Struts2 in Action》的37页第7行看看。  Action它本身没有任何控制的行为,何来控制可言, 即使你实现了一层抽象的Action加了一些控制进去,那它也只是Model+Controller的一个合体而已。

关于过度设计,我的帖子上也只是说有过度设计之嫌,我也只是在呼吁“编程应该尽可能简单”的敏捷开发思想而已。。




downpour 的回答一看就是很有经验的人。struts2在整个SSH架构中的确是Controller,负责消息转发。
0 请登录后投票
   发表时间:2011-09-14  
lpn520 写道
wangking717 写道
真想看看那个HELLOWORD分8个的代码,让我见识一下。

让你见识一下传说中的8个文件:

前端
helloWorld.jsp                //页面文件,不用说了
helloWorld.js                 //javascript文件

Struts的Action,就叫动作层吧
HelloWorldAction.java         //Action类文件,客户端请求到这个类上

业务层
HelloWorldService.java        //业务接口, 还用了一套传说中的“面向接口编程”
HelloWorldServiceImp.java     //业务实现类,实现上面定义的接口

DAO层
HelloWorldDao.java            //数据操作类,关于HelloWorld业务的数据操作都在这里
HelloWorld.java               //HelloWorld表的ORM的对象
HelloWorld.xml                //HelloWorld表操作的SQL语句,ibatis的sqlmap






这个不算过度设计吧..一般都是这么做的..要非要废掉一层...那就是HelloWorldService.java

其实我一直在写这层的时候困惑..根本就是不需要的嘛..
其他的...也可以优化..但是就不是过度设计的问题了


比如

jsp和js可以写到一起

Dao可以用一个..实体类.的xml可弄个注解...更偏向于敏捷开发了
0 请登录后投票
论坛首页 Java企业应用版

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