锁定老帖子 主题:“过度设计”之真实例子
该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间: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,负责消息转发。 |
|
返回顶楼 | |
发表时间: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可弄个注解...更偏向于敏捷开发了 |
|
返回顶楼 | |