面向功能开发一点经验

  编程的时候总是犯一个错误,要实现一个功能,总是先想着这个功能需要调用到什么函数,然后先实现一个个子函数,再写功能体,这样好像很好,编译不会出错,功能也实现了。但是,这样真的很好吗?有没有一种更好的方式呢?
  以注册用户为例。
  环境:VS2005,ASP.NET,C#。
  我们在界面上放置一个叫RegButton的按钮,点击后会实现注册功能。我们一般是想法如下:
  1.我们需要验证数据是否正确,好,需要一个CheckData函数,在代码上写上
1 None.gif private   bool  CheckData( tb_user User)
2 ExpandedBlockStart.gifContractedBlock.gif dot.gif {
3InBlock.gif  // 检查注册信息是否正确
4ExpandedBlockEnd.gif}
  2.然后,我们需要一个注册功能。好,在代码上写上
None.gif private   void  RegUser(tb_user User)
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif  
// 实现注册功能
InBlock.gif  
// 写入数据库
ExpandedBlockEnd.gif
}
  3.注册成功,需要跳转到成功页面,在代码上写
None.gif private   void  RedirectToSuccessPage( string  Info)
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif  
// 跳转到成功页面
InBlock.gif
  Response.redirect("Success.aspx?info=" + Info);
ExpandedBlockEnd.gif}
  好,现在开始写RegButton_Onclick事件
None.gif protected   void  RegButton_Onclick( sender, e )
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif  tb_user user 
= new tb_user();
InBlock.gif  
this.CheckData( user );
InBlock.gif  
this.RegUser( user );
      this.RedirectToSuccessPage("注册成功");
ExpandedBlockEnd.gif}

这时,发现少了一个得到用户信息的函数。我们在代码上写上
None.gif private  tb_user GetUserInfo()
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif  
// 得到用户注册信息
ExpandedBlockEnd.gif
}
然后,把RegButton_OnClick事件改成
None.gif protected   void  RegButton_Onclick( sender, e )
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif  tb_user user 
= this.GetUserInfo();
InBlock.gif  if(
this.CheckData( user ) )
     {
InBlock.gif     
this.RegUser( user );
     }
     this.RedirectToSuccessPage("注册成功");
ExpandedBlockEnd.gif}
  这样就可以注册了。但这样我们会发现,我们一开始的逻辑是没有理清的,中间断了层也不知道。这样写,经常会写少了函数,或者是写多了函数,甚至最后都不知道自己写那些函数想干嘛。在没有一个功能框架的情况下,先实现子功能。所以,我们需要更好的策略。
  我们可以借鉴测试驱动开发,而且面向功能来实现代码,而不是先考虑实现的细节。
  首先,我们写OnClick函数。
  
None.gif protected   void  RegButton_Onclick( sender, e )
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif  tb_user user 
= this.GetUserInfo();
InBlock.gif  if(
this.CheckData( user ) )
     {
InBlock.gif     
this.RegUser( user );
     }
     this.RedirectToSuccessPage("注册成功");
ExpandedBlockEnd.gif}
  这样,我们就定义了流程的逻辑过程。不会写多了函数,也不会写少了函数,也不会逻辑混乱。
  然后,VS2005会提示我们,有几个函数没有定义。我们使用VS2005帮我们自动生成一个定义。

  生成的结果如下:
None.gif void  CheckData( tb_User user )
ExpandedBlockStart.gifContractedBlock.gif    
dot.gif {
InBlock.gif          
throw new Exception("函数示定义");
ExpandedBlockEnd.gif    }

  我们直接改函数体就行了。可以在很多比较复杂的逻辑过程函数中使用此方法。

转载于:https://www.cnblogs.com/fyan888/archive/2007/07/20/WritingCode.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值