面向功能开发一点经验

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

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

  生成的结果如下:
void CheckData( tb_User user )
    
{
          
throw new Exception("函数示定义");
    }

  我们直接改函数体就行了。可以在很多比较复杂的逻辑过程函数中使用此方法。
原文地址:https://www.cnblogs.com/fyan888/p/WritingCode.html