要资料 文章 文库 视频 Code iProcess 课程 认证 咨询 工具 火云堂 讲座吧   成长之路  
会员   
 
  
每天15篇文章
不仅获得谋生技能
更可以追随信仰
 
 
 
采用面向对象的方式去拆任务
 

2010-11-03 作者:曾浩 来源:曾浩的blog

 

面向对象编程,我们口口声声喊了快十年,但为什么程序员还不使用面向对象编程?是知识、经验不够?非也。笔者想用一句牢骚话作为开篇:拆任务都拆成面向过程的了,还怎么叫程序员去面向对象开发。

让我们改进一点点:

  1. 留两个小时给程序员理解需求。
  2. 采用面向对象的方式去拆任务。

让我们思考一下下:

  1. 面向过程在一定程度上比面向对象有性能上的优势,那么,两者如何均衡?使我们既不为了面向对象而忽视性能,也不为了追求性能而忽视面向对象。

何为留两个小时给程序员理解需求?

在具体工作中,团队由于受到各种外围因素影响,常会发生以下两种情况

  1. FS Review和Plan meeting相隔较久,导致程序员对需求已经模糊。
  2. 面向过程的拆分方式,导致程序员只关心自己做的需求。

模糊的,片面的需求,阻碍了我们开展面向对象编程。所以,我们需要留两个小时给程序员理解需求。

如何采用面向对象的方式去拆任务?

银行借贷系统,用户输入50万,20年还清,点击借款按钮后,屏幕显示用户在240期内每期要还多少钱。

面向过程拆分方式:
1.前台-画界面
2.后台-新增用户
3.后台-计算利息
4.后台-计算总额(本金+利息)
5.后台-计算每期还款金额
6.后台-打印

我们会在DAO层编写四个函数AddBorrower,CalcRate,CalcTotal,CalcAmount。Model层新建一个对象叫Loan(反模式-面条代码症状:对象常常被按照处理过程命名) 。Service层编写两个函数Loan,Print,供aspx页面去调用。

面向对象拆分方式:
1.前台-画界面
2.借款者对象
3.银行对象
4.实现借款者对象行为-新增用户
5.实现银行对象行为-计算利息
6.实现银行对象行为-计算总额
7.实现银行对象行为-计算每期还款金额
8.实现银行对象行为-打印

我们会在Model层新建两个对象Borrower,Bank,并去实现它们的属性和行为。DAO层仅仅作为数据提供层。Service层依旧编写两个函数Loan,Print,供aspx页面去调用

为何采用面向对象的方式去拆任务?

继续上例,我们允许各个银行的贷款利率在央行基准利率的指导下上下浮动5%,比如央行基准利率为15%,中国银行为14%,建设银行为17%,民生银行依旧采用央行基准利率。

面向过程拆分方式:
1.前台-画界面,增加下拉框,选择中国银行或建设银行或民生银行
2.后台-修改计算利息

代码如下:修改计算利息函数
public class Bank
{
//一些属性

//一些方法

public decimal CalcRate()
{
if(中国银行)  
{    
//用14%计算  
}  
else if(建设银行)  
{    
//用17%计算  
}  
else  
{    
//用央行基准利率15%计算  
}
}
}

大胆试想一下,随着sprint的不断深入,需求新增或变更,或修复Bug,该函数会被多人多次修改,由于编程风格、习惯的不同,很容易出现无法解释其合理性的变量和代码碎片(反模式-岩浆流),最后,软件迅速达到回报最小点,维护现有代码集的成本比从头开始开发新方案的成本更高。

面向对象拆分方式:
1.前台-画界面,增加下拉框,选择中国银行或建设银行或民生银行
2.新增两个对象,中国银行,建设银行
3.实现中国银行行为-计算利息
4.实现建设银行行为-计算利息

重构
//银行基类
public class Bank
{
//一些属性

//一些方法

public decimal CalcRate()
{
//用央行基准利率15%计算
}
}

//中国银行
public class BankOfChina : Bank
{
public override decimal CalcRate()
{
//用14%计算
}
}

//建设银行
public class CCB : Bank
{
public override decimal CalcRate()
{
//用17%计算
}
}

简要描述下好处吧

  1. 运用设计模式去架构程序
  2. 避免了程序员采用惰性模式开发
  3. 使得函数对扩展开放,对修改关闭

最后,笔者想说

学习,架构,重构。三者环环相扣,互不分离。不去学习,就没有足够的知识去架构和重构,代码永远只停留在面向过程的水平上。而架构和重构又互为因果,有了架构,才能重构;有了重构,为了更好的架构。

最后,有的人想问,我们项目原先的代码已经是面向过程,如何在其基础上进行面向对象的架构和重构?为此,笔者送出关键一句话:调整程序结构以使(短期内)添加新功能更容易。更多内容请见另外一篇博文《如何重构你的程序-安全重构法》,相信你会满意的。



如何向妻子解释OOD
OOAD与UML笔记
UML类图与类的关系详解
UML统一建模语言初学
总结一下领域模型的验证
基于 UML 的业务建模


面向对象的分析设计
基于UML的面向对象分析设计
UML + 嵌入式系统分析设计
关系数据库面向OOAD设计
业务建模与业务架构
使用用例进行需求管理

相关咨询服务
UML+OOAD项目实施
UML+OOAD项目敏捷咨询


某航空IT部门 业务分析与业务建模
联想 业务需求分析与建模
北京航管科技 EA工具与架构设计
使用EA和UML进行嵌入式系统分析
全球最大的茶业集团 UML系统分析
华为 基于EA的嵌入式系统建模
水资源服务商 基于EA进行UML建模
更多...   
 
 
 
 
 
每天2个文档/视频
扫描微信二维码订阅
订阅技术月刊
获得每月300个技术资源
 
 

关于我们 | 联系我们 | 京ICP备10020922号 京公海网安备110108001071号