zoukankan      html  css  js  c++  java
  • 面向功能开发一点经验

      编程的时候总是犯一个错误,要实现一个功能,总是先想着这个功能需要调用到什么函数,然后先实现一个个子函数,再写功能体,这样好像很好,编译不会出错,功能也实现了。但是,这样真的很好吗?有没有一种更好的方式呢?
      以注册用户为例。
      环境: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("函数示定义");
        }

      我们直接改函数体就行了。可以在很多比较复杂的逻辑过程函数中使用此方法。
  • 相关阅读:
    Shader 结构体中语义的理解
    计算包围盒中心坐标
    c#脚本控制shader
    PS2键盘 + LCD12864 实验
    基于M9K块配置ROM的LCD12864图片显示实验
    LCD12864 液晶显示-汉字及自定义显示(串口)
    LCD12864 液晶显示-汉字及自定义显示(并口)
    基于Verilog HDL 的数字电压表设计
    基于Verilog HDL的ADC0809CCN数据采样
    触发器(基本的SR触发器、同步触发器、D触发器)
  • 原文地址:https://www.cnblogs.com/fyan888/p/WritingCode.html
Copyright © 2011-2022 走看看