Sunshow Life
回到最初的美好
  • Home
  • Archives
  • Links
  • Tips
  • Projects
  • Documents
  • Gallery
Browse: Home / else

else

[转载]你还在用if else吗?

[转载]你还在用if else吗?

2006-04-27 10:00 | Posted by Sunshow | Filed Under Java

你还在用if else吗? 板桥里人 http://www.jdon.com 2006/1/11(转载请保留)   面向过程设计和面向对象设计的主要区别是:是否在业务逻辑层使用冗长的if else判断。如果你还在大量使用if else,当然,界面表现层除外,即使你使用Java/C#这样完全面向对象的语言,也只能说明你的思维停留在传统的面向过程语言上。 传统思维习惯分析   为什么会业务逻辑层使用if else,其实使用者的目的也是为了重用,但是这是面向过程编程的重用,程序员只看到代码重用,因为他看到if else几种情况下大部分代码都是重复的,只有个别不同,因此使用if else可以避免重复代码,并且认为这是模板Template模式。   他范的错误是:程序员只从代码运行顺序这个方向来看待它的代码,这种思维类似水管或串行电路,水沿着水管流动(代码运行次序),当遇到几个分管(子管),就分到这几个分管子在流动,这里就相当于碰到代码的if else处了。   而使用OO,则首先打破这个代码由上向下顺序等同于运行时的先后循序这个规律,代码结构不由执行循序决定,由什么决定呢?由OO设计;设计模式会取代这些if else,但是最后总是由一个Service等总类按照运行顺序组装这些OO模块,只有一处,这处可包含事务,一般就是Service,EJB中是Session bean。   一旦需求变化,我们更多的可能是Service中各个OO模块,甚至是只改动Service中的OO模块执行顺序就能符合需求。   这里我们也看到OO分离的思路,将以前过程语言的一个Main函数彻底分解,将运行顺序与代码其他逻辑分离开来,而不是象面向过程那样混乱在一起。所以有人感慨,OO也是要顺序的,这是肯定的,关键是运行顺序要单独分离出来。   是否有if else可以看出你有没有将运行顺序分离到家。 设计模式的切入口   经常有人反映,设计模式是不错,但是我很难用到,其实如果你使用if else来写代码时(除显示控制以外),就是在写业务逻辑,只不过使用简单的判断语句来作为现实情况的替代者。    还是以大家熟悉的论坛帖子为例子,如ForumMessage是一个模型,但是实际中帖子分两种性质:主题贴(第一个根贴)和回帖(回以前帖子的帖子),这里有一个朴素的解决方案: 建立一个ForumMessage,然后在ForumMessage加入isTopic这样判断语句,注意,你这里一个简单属性的判断引入,可能导致你的程序其他地方到处存在if else 的判断。   如果我们改用另外一种分析实现思路,以对象化概念看待,实际中有主题贴和回帖,就是两种对象,但是这两种对象大部分是一致的,因此,我将ForumMessage设为表达主题贴;然后创建一个继承ForumMessage的子类ForumMessageReply作为回帖,这样,我在程序地方,如Service中,我已经确定这个Model是回帖了,我就直接下溯为ForumMessageReply即可,这个有点类似向Collection放入对象和取出时的强制类型转换。通过这个手段我消灭了以后程序中if else的判断语句出现可能。   从这里体现了,如果分析方向错误,也会导致误用模式。   讨论设计模式举例,不能没有业务上下文场景的案例,否则无法决定是否该用模式,下面举两个对比的例子: 第一. 这个帖子中举例的第一个代码案例是没有上下文的,文中只说明有一段代码: main() {     if(case A){     // do with strategy A     }else(case B){     // do [...]

Permalink | Trackback | 1 Response

GMail & GTalk

Tweets

  • 惊闻《轩辕剑》被终结了,大宇你啥时候被终结啊 44 mins ago
  • @imsoff 偶的团是啥 1 day ago
  • @qatang 贱 in reply to qatang 1 day ago
  • 看完Inception,原来是蝴蝶效应套了个不同的壳 2 days ago
  • 你敢不每天在我附近转悠还不请我吃饭吗? RT: @imsoff: 偶又来了 (@ 新中关购物中心 The Gate City Mall) http://4sq.com/btI3T6 2 days ago
  • More updates...

Subscriptions

Subscribe me
google reader
鲜果
抓虾
bloglines
有道
QQ邮箱
九点

Categories

  • Arsenal
  • C
  • Delphi
  • Game
  • Java
  • Life
  • Linux
  • Network
  • PHP
  • Software
  • WebDev
  • WordPress

RSS Shared Items

  • 【喷嚏】看完《盗梦空间》
  • Nethogs 命令:终端下查看每个进程的带宽占用情况
  • 地球上最神秘的“有关部门”终于露面了!
  • 武汉公交车,无法超越的存在
  • 继罗本是个球后网友又一力作!厄齐尔什么都像!喵喵喵喵喵喵~

Recommend

  • 乐和彩
  • WebTmp.CN - Joomla 应用入门

Blogroll

  • LIfe iS StRUGgle
  • bianbian coding life
  • 不和谐因素
  • CuteFool.Net - 南子

Recent Comments

  • 广州SEO: 把它拖到小工具之后,前台不显示任何变化
  • bianbian.org: 鼓掌,散花~
  • hhdem: 必须顶一个,创业有理,折腾最大
  • cutefool: 恭喜一下~不容易啊
  • billrice: 能后台给哥改个500w么,哥跟你二一添作五

Meta

  • 登录
  • 文章 RSS
  • 评论 RSS
  • WordPress.org

Tag Cloud

bug 仙剑 WordPress html 下载 android 搬家 javascript 字体 Arsenal QQ Java ie 生活 feed 安装 工作 上海 中国 google 无线 更新 插件 Linux 阿森纳 拼音 windows 冠军杯 plugin 互联网 图片 电影 web 主题 手机 中文 轩辕剑 Delphi 生日 soff css ubuntu 输入法 珊瑚虫 firefox

Copyright © 2006-2010 Sunshow Life • Powered by Wordpress • Creative Commons

京ICP备05059555号