日期:2014-05-20  浏览次数:20702 次

关于开发理论的回帖整理之一
问题:三层结构的模型层把软件搞得很麻烦,有必要吗?
详见http://topic.csdn.net/u/20091217/14/e54f2902-37b2-4432-b16a-98b54807c025.html
我的回答:
其实很多初级开发人员往往提出的是最质朴的问题,而这往往又触及到很多软件开发的深刻理论, 
这也是很多所谓有经验的高级开发人员无法回答的, 
不成熟的团队只是作出model、BLL这种分层的样子,而代码实际上并没有分层; 

什么是“低耦合”?什么是“面向修改封闭”? 
最实际的,如果如果用户要在表单上增加一个字段,看看你的项目要改几个地方,触及到几个层? 
一个成熟的开发组织,在这种情况下只修改一处,那就是项目文档(或者说项目模型), 
当然如果你的团队能做到只修改2处,一处项目文档,一处数据库,那做的也不错, 
当然如果你还要修改UI的话其实做的也很不错了,但这样就已经不适合工业化生产了; 

再说说什么是“强内聚”,什么是“面向添加开放” 
功能单一到不可拆卸的模块就是最高强度的内聚,换句话说就是要把你的代码原子化, 
接下来就是推迟组装,推的越迟越好, 
一个成熟的开发组织,能把功能推迟到运行时组装,也就是说组装是自动完成的。 


请想想电脑换内存的事情,有可能要拔下就内存,插上新内存,搞定,当然还需要打开机箱外壳, 
是不是打开外壳跟换内存无关呢?当然这并不是主要矛盾,因为内存很少更换, 
所以U盘是直接插在外壳的接口上的,因为这种存储介质经常使用, 
再看看工业应用:热插式硬盘、热插式电源, 
需求变更和故障排除变成了替换和添加, 
这些举不胜举的例子都可以为我们的软件设计提供好的思想, 
虽然软件工业还不够成熟,但是传统工业已经成熟了,我们可以借鉴; 

最后要说:不要为了分层而分层,层不拘束于某种样式,既可以有形,也可以无形, 
如果预见到你的团队将来会开发更加复杂的项目,而这种复杂是扩散的 
那么请付出最大的成本构建项目的生产模式,否则的话将来开发成本将不可控制。 

这都是本人的切身感受和经历,并非来自网摘,也非权威,有误不当之处,专家指正。 



------解决方案--------------------
学习
------解决方案--------------------
楼主说得不错!!学习之!!
------解决方案--------------------
有收获
------解决方案--------------------
不错
------解决方案--------------------
顶~
------解决方案--------------------
很好!

有些项目中“牵强附会”的三层结构不仅带来的是维护的麻烦,当需求变更后更麻烦,工作量没减少,反倒加大了,运行效率也会有所降低。

多亏有所谓的代码生成器之类工具,否则累死人。


------解决方案--------------------
学习
------解决方案--------------------
学习,说的挺好
------解决方案--------------------
分层不是简单滴分隔,或是建立独立的 project,

分层是职责的划分,每层分布不同抽象级别的对象,
分层必须对应分层的抽象设计,否则分层只能自寻烦恼!

大师们已经讲了许多,可惜能耐心去读一读的程序员却是凤毛麟角!
------解决方案--------------------
比较欢迎这类总结性的文字,先mark再看。。。
------解决方案--------------------
up
------解决方案--------------------
DING.
------解决方案--------------------
文章很好 很需要
------解决方案--------------------
探讨

什么是“低耦合”?什么是“面向修改封闭”?
最实际的,如果如果用户要在表单上增加一个字段,看看你的项目要改几个地方,触及到几个层?
一个成熟的开发组织,在这种情况下只修改一处,那就是项目文档(或者说项目模型),
当然如果你的团队能做到只修改2处,一处项目文档,一处数据库,那做的也不错,
当然如果你还要修改UI的话其实做的也很不错了,但这样就已经不适合工业化生产了;


------解决方案--------------------
友情UP
------解决方案--------------------
顶一个
------解决方案--------------------

给楼主顶一个
------解决方案--------------------

------解决方案--------------------

------解决方案--------------------
up
------解决方案--------------------
rt
------解决方案--------------------