论坛首页 Java企业应用论坛

敏捷思考 遵循与破坏"开闭原则"

浏览 12953 次
精华帖 (1) :: 良好帖 (1) :: 新手帖 (18) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-09-17  
ldinh 写道
solonote 写道
ldinh 写道
开闭原则太隐晦了。针对接口编程和针对实现编程,前者只是用初期的较小付出为不可知的系统变化买的一份保险。这个例子应该算是典型的策略模式吧?


1.开闭原则隐晦
我写这篇文章就是想说说自己的认识,如果你不明白,能否说一下是哪里有困惑,讨论讨论

2.这个例子应该算是典型的策略模式吧?
策略模式的定义就是依赖于抽象,不依赖于具体实现.所以你只要依赖于抽象的地方都可以理解为策略模式.(个人感觉很无聊的一个模式)


隐晦的是它的名字。开闭原则在我看来就是针对接口编程。而策略模式最直接的解释了它。


开放封闭原则跟针对接口编程并不是直接关联的,javascript开发中可以一个接口都没有,照样遵守开放封闭原则。
针对接口编程了,但这个接口不是内聚的,类的设计不遵守“单一职责原则”,类的内聚性很差,照样违反了开放封闭原则。
0 请登录后投票
   发表时间:2009-09-18  
思维太oo了,不是好事情,容易把简单的事情复杂化
0 请登录后投票
   发表时间:2009-09-18  
andyyehoo 写道
思维太oo了,不是好事情,容易把简单的事情复杂化



无法理解你的话,能否给个例子
0 请登录后投票
   发表时间:2009-09-18  
xly_971223 写道
敏捷本质上跟开闭原则就是冲突的


为什么啊
0 请登录后投票
   发表时间:2009-09-18  
solonote 写道
andyyehoo 写道
思维太oo了,不是好事情,容易把简单的事情复杂化



无法理解你的话,能否给个例子


比如如下代码
如果事情很简单
打开一扇门,我们可以,
isDoorOpen = true

如果oo点
就是
 function openDoor(){
         this.isDoorOpen  =true;
}
    

如果更oo点
Door door = Door.getInstance();
 door.open();


如果整个工程就是为了开门,显然搞的太复杂没有意义

0 请登录后投票
   发表时间:2009-09-18  
嘿嘿,这不就是我一直想说的,我们应该敏捷起来吗?
0 请登录后投票
   发表时间:2009-09-18  
这样的讨论很精彩,我在开发当中也经常遇到这样的问题。大部分的解决办法都是在后面加些参数,多些判断语句完事。就像LZ的方案一一样。因为,觉得这种办法最直接有效,但导致的结果是说,代码越来越多,维持起来越来越麻烦。偶尔也尝试用扩展的方式去新增一个类来解决。所以,我现在的认为是说,扩展与修改之间,做出两者间的平衡,如何取舍这点上,前期的分析或者判断,很难。
0 请登录后投票
   发表时间:2010-02-21  
提高代码质量才是王道。至于预测未来,纯属扯淡。基于已有问题进行设计,而不是基于预测进行设计。设计的目的,是解决已存在的问题,而不是对未来的变化赌大小。
修改未必不可接受。软件的变化,必然会导致修改代码。配置文件,也是代码。从实际情况来看,修改配置文件,有时候还不如修改代码效率高。
怎么样能用最快的方法解决问题,保证软件质量,就是最好的设计。
好的设计,就是让编程变成打字。在保证正确性的前提下,开发和测试成本最低的设计就是最好的设计。
好的设计就是提高工作效率,其他都是扯淡。
0 请登录后投票
   发表时间:2010-02-22  
简单和灵活性本来就是矛盾的,想要灵活势必会需要增加额外的付出,OO的目的就是为了解耦、扩展和维护,工作量一定会增加,如果做简单的应用是不用这么麻烦,但当开发一套复杂的系统,或进行重构,就能体会到接口的好处了,至于说到的增加接口的代码量,现在很多工具都能直接自动生成,能让机器来做的就不用人肉了。
0 请登录后投票
   发表时间:2010-03-01  
依赖接口不依赖实现,接口实现分离,压根就是个习惯了。应该属于OCP的最开始的一个级别的遵守了
0 请登录后投票
论坛首页 Java企业应用版

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