`
lpn520
  • 浏览: 46579 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

“过度设计”之真实例子

阅读更多
  我刚到了一家新公司,公司给我的感觉很不错,不过当开始做第一个项目时便有过度设计的嫌疑,项目不大,基本就实现CURD的功能,用struts2+spring+ibatis+extjs。拿我开发的一个简单的功能来讲,就花了大概一周,如果采用简化的技术,实际上可能只需要一两天。

  设计太多的分层,以及偶和性太高,添加或修改一个模块太困难了,而且还不知道会不会影响到其它模块。按照项目定义的规范做法,写一个Hello world,创建的代码文件个数必须达到8个!!!!

  过度分层已经成为过度设计的一个典型。项目经理说,这是另一个项目的架构直接搬过来用的,我们做一下架构上的优化。

  其实本来就没有什么优化,原来本就是简单的东西,为了显示技术,搞得特复杂。现在所谓的优化,实际上回归质朴而已。

  记得OSI7层模型就有过度设计嫌疑,可以去看一下现在的教材,都没有用OSI作为例子,尤其没有专门讨论会话层。

  如何防止过度设计,最好办法就是使用敏捷编程,他的思路就是刚刚好就行,如果有问题,再重构。另外我自己目前的实践方法就是多编程,少设计,好像也能避免。因为当你的任务主要是写代码的时候,你绝不会去写8个类来完成一个helloworld。

  其实,我所说的就是开发原型,也是《敏捷开发方法》里提到过的方法。


分享到:
评论
250 楼 lpn520 2010-09-30  
lipeixin 写道
lpn520 写道
fengzl 写道
初级贴,不想发言,楼主去吧过度设计的概念搞清楚再说


不好意思,对于一个CRUD的项目来说,这就是过度设计


lz一直按照敏捷的思路"够用就好"来保持自己的观点并形成自己的理由,但是,这个不能成为你否定分层的理由,这两个没有冲突,敏捷强调及时响应用户,降低开发周期,能及时让用户看到成果,可是按照你说的架构,慢慢迭代下去,保证会有一个重大重构的过程,可能你会说,重构不就是敏捷强调的吗?可是中国能有几个公司能这样让你把代码重构,你能保证你们团队成员的经验,能力和你一样吗?还是你花大量时间和团队成员讲解,你的设计思路,你的理由?还是等到重构出现问题,客户抱怨了,然后你和客户说,这个我们在重构引起的?楼上很多观点都说明你对过度设计这个概念定义不清楚,
就连spring这么著名的项目,人家也只是说怀疑有过渡设计之嫌,希望lz能抱着负责任的态度,将自己的思想告诉大家,否则你说你是设计师,别人是不会相信的,至少你的设计经不起别人的推敲.


帖子我写的,也只是说有过度设计之嫌, 我也是提出了设计可以从简, 以及从简的方案
249 楼 lipeixin 2010-09-30  
lpn520 写道
fengzl 写道
初级贴,不想发言,楼主去吧过度设计的概念搞清楚再说


不好意思,对于一个CRUD的项目来说,这就是过度设计


lz一直按照敏捷的思路"够用就好"来保持自己的观点并形成自己的理由,但是,这个不能成为你否定分层的理由,这两个没有冲突,敏捷强调及时响应用户,降低开发周期,能及时让用户看到成果,可是按照你说的架构,慢慢迭代下去,保证会有一个重大重构的过程,可能你会说,重构不就是敏捷强调的吗?可是中国能有几个公司能这样让你把代码重构,你能保证你们团队成员的经验,能力和你一样吗?还是你花大量时间和团队成员讲解,你的设计思路,你的理由?还是等到重构出现问题,客户抱怨了,然后你和客户说,这个我们在重构引起的?楼上很多观点都说明你对过度设计这个概念定义不清楚,
就连spring这么著名的项目,人家也只是说怀疑有过渡设计之嫌,希望lz能抱着负责任的态度,将自己的思想告诉大家,否则你说你是设计师,别人是不会相信的,至少你的设计经不起别人的推敲.
248 楼 lpn520 2010-09-30  
hjb1029 写道
说到底,楼主还没理解mvc真正的含义,丢恒生的脸啊。

可能我需要向您学习,但请你说话还是别太绝对, 我曾经自己写了一个轻量级的MVC框架, 丢不丢恒生的脸, 不是你说得算。。。
247 楼 lpn520 2010-09-30  
fengzl 写道
初级贴,不想发言,楼主去吧过度设计的概念搞清楚再说


不好意思,对于一个CRUD的项目来说,这个有“过度设计”之嫌,不过份
246 楼 PowerNTT 2010-09-30  
除了JS文件基于common/reuse考虑,是否需要独立出来外;其他我认为是比较合理的;
并且Dao甚至可以再添加一个BaseDao来抽象一些Common操作;

245 楼 2022228 2010-09-30  
这个帖子的回复好快好快啊
244 楼 2022228 2010-09-30  
lpn520 写道
2022228 写道
2022228 写道
js单独放在一个文件中的好处:
客户端第一次请求后就会缓存,不会找服务器要了

如果你放在jsp文件中:
js的代码每次都要由服务器发给客户端,增加网络传输量

service层是用于事务处理拦截处理的,一般的系统需要。你们不需要的话,的确可以省掉这层。
dao层存在也合理啊,每张表一个dao





兄弟,JSP里的静态资源也会缓存下来的



jsp里面的js代码是怎么缓存的?你给我讲讲
243 楼 mikeshi 2010-09-30  
嗯,忍不住了,看了helloworld的代码,我觉得这个很正常,面向对象是鼓励面向接口编程的,所以出现XXX.java XXXImpl.java这样的代码非常正常,html和js分离也很正常,其他都是些必需的东西。

兄弟你要好好学习,而不是鄙视的态度
242 楼 my_corner 2010-09-30  
4年经验,架构师,呵呵呵呵呵
241 楼 ...mo_mo... 2010-09-30  
mercyblitz 写道
...mo_mo... 写道
mercyblitz 写道
...mo_mo... 写道
复杂查询哪就教给 ibatis或是jdbc都可以啊,hibernate也是可以本地sql~



是啊,但是写道DAO里面相对来说好一点吧。

我觉得怎么都行,不是看团队约定吧。


这个。。。,如果有人做Code Review的话,可能会说一下。

打错了,主要还是看团队约定吧~~~
240 楼 mercyblitz 2010-09-30  
...mo_mo... 写道
mercyblitz 写道
...mo_mo... 写道
复杂查询哪就教给 ibatis或是jdbc都可以啊,hibernate也是可以本地sql~



是啊,但是写道DAO里面相对来说好一点吧。

我觉得怎么都行,不是看团队约定吧。


这个。。。,如果有人做Code Review的话,可能会说一下。
239 楼 ...mo_mo... 2010-09-30  
mercyblitz 写道
...mo_mo... 写道
复杂查询哪就教给 ibatis或是jdbc都可以啊,hibernate也是可以本地sql~



是啊,但是写道DAO里面相对来说好一点吧。

我觉得怎么都行,还是看团队约定吧。
238 楼 matt.u 2010-09-30  
不管楼主的想法符不符合实际情况,也不管这种方式正不正确,但我觉得楼主这种怀疑和求知的态度值得鼓励。

走出java这一小步,你会发现还有很大一块天。
237 楼 mercyblitz 2010-09-30  
...mo_mo... 写道
复杂查询哪就教给 ibatis或是jdbc都可以啊,hibernate也是可以本地sql~



是啊,但是写道DAO里面相对来说好一点吧。
236 楼 hjb1029 2010-09-30  
说到底,楼主还没理解mvc真正的含义,丢恒生的脸啊。
235 楼 ...mo_mo... 2010-09-30  
复杂查询哪就教给 ibatis或是jdbc都可以啊,hibernate也是可以本地sql~
234 楼 mercyblitz 2010-09-30  
...mo_mo... 写道
kjj 写道
绝对的过度设计,我就把dao砍掉了,一般项目,根本不需要那么复杂!!!

如果用hiberante等ORM框架其实没必有DAO了,
可以 interfaceService abstractService  HibernateServiceImpl(或是IbatisServiceImpl)
如果用到泛型哪这个Impl也可以去掉了.
这样代码量也不会有多少,而且可以组织复杂的逻辑,在Action中最好还是不要直接写持久层的代码,系统复杂的性况下还是需要Service的。




DB不只是简单的CRUD,还有复杂的查询。。。
233 楼 ...mo_mo... 2010-09-30  
kjj 写道
绝对的过度设计,我就把dao砍掉了,一般项目,根本不需要那么复杂!!!

如果用hiberante等ORM框架其实没必有DAO了,
可以 interfaceService abstractService  HibernateServiceImpl(或是IbatisServiceImpl)
如果用到泛型哪这个Impl也可以去掉了.
这样代码量也不会有多少,而且可以组织复杂的逻辑,在Action中最好还是不要直接写持久层的代码,系统复杂的性况下还是需要Service的。

232 楼 lipeixin 2010-09-30  
个人觉得MVC教给我们的是一种思想,大家对现实世界都有个认识,有的人认为这样合适,有点人则认为不合适,引用一句著名语言:没有调查就没有发言权,不知道lz有没有真正对自己公司手下的程序员做过调查,看看大家的想法是怎么样啊?如果大家都认为不合适,再问:为什么不推翻了,重新设计,
会有很多回答:
1.要快速提交市场,没时间重新设计,没经费
2.老板不会同意,不会带来显著效益,公司不是你的试验田,你必须有十足的把握,
能在多长时间完成你的设计,你的设计能给公司开发带来多大好处?
这些问题你问过自己了吗?看了半天,lz都是一些细枝末节的讨论,什么文件要几个,实在没必要,如果你真想改变这个现状,建议你搞个试验,有充分的研究和讨论后再发出来,给整个java开发世界一个新的思路.
说的不足之处,大家指教,谢谢大家.
231 楼 matt.u 2010-09-30  
zdmcjm 写道
你们项目修改后,需要重新热部署很久吗?大概多久,我的一般2-3秒。您是不是没设jvm参数?你们用grails做项目,分不分出一个service层?


我们公司没有使用,只是在对grails做调研时我用了一下,我的确没有调整jvm参数,但我看了下热部署的日志以及出现错误的问题,貌似grails(或者说grails的tomcat插件)在热部署时,把相关的GSP都删了,然后再重新发布一次。这个过程在我机器上要个5、6秒吧。不是太让人接受。

我也碰到grails里面的service问题,因为事务是在Service层上的,所以要求做增删改时都应该要使用Service层吧(我看的文档和Grails社区的相关文章,都是这样建议的)。如果要图简单,就需要再Controller直接调Domain的find方法,又要调Service里面的save方法,这样就感觉有点混乱,概念不太一致。

我觉得最好事务可以透明的加到Domain上面。当然有些Rails Like框架是把事务加到Action上面的。


相关推荐

Global site tag (gtag.js) - Google Analytics