面向功能开发一点经验
编程的时候总是犯一个错误,要实现一个功能,总是先想着这个功能需要调用到什么函数,然后先实现一个个子函数,再写功能体,这样好像很好,编译不会出错,功能也实现了。但是,这样真的很好吗?有没有一种更好的方式呢?
以注册用户为例。
环境:VS2005,ASP.NET,C#。
我们在界面上放置一个叫RegButton的按钮,点击后会实现注册功能。我们一般是想法如下:
1.我们需要验证数据是否正确,好,需要一个CheckData函数,在代码上写上
这时,发现少了一个得到用户信息的函数。我们在代码上写上
我们可以借鉴测试驱动开发,而且面向功能来实现代码,而不是先考虑实现的细节。
首先,我们写OnClick函数。
然后,VS2005会提示我们,有几个函数没有定义。我们使用VS2005帮我们自动生成一个定义。
生成的结果如下:
我们直接改函数体就行了。可以在很多比较复杂的逻辑过程函数中使用此方法。
以注册用户为例。
环境:VS2005,ASP.NET,C#。
我们在界面上放置一个叫RegButton的按钮,点击后会实现注册功能。我们一般是想法如下:
1.我们需要验证数据是否正确,好,需要一个CheckData函数,在代码上写上
1private bool CheckData( tb_user User)
2{
3 // 检查注册信息是否正确
4}
2.然后,我们需要一个注册功能。好,在代码上写上2{
3 // 检查注册信息是否正确
4}
private void RegUser(tb_user User)
{
// 实现注册功能
// 写入数据库
}
3.注册成功,需要跳转到成功页面,在代码上写{
// 实现注册功能
// 写入数据库
}
private void RedirectToSuccessPage(string Info)
{
// 跳转到成功页面
Response.redirect("Success.aspx?info=" + Info);
}
好,现在开始写RegButton_Onclick事件{
// 跳转到成功页面
Response.redirect("Success.aspx?info=" + Info);
}
protected void RegButton_Onclick( sender, e )
{
tb_user user = new tb_user();
this.CheckData( user );
this.RegUser( user );
this.RedirectToSuccessPage("注册成功");
}
{
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("注册成功");
}
这样就可以注册了。但这样我们会发现,我们一开始的逻辑是没有理清的,中间断了层也不知道。这样写,经常会写少了函数,或者是写多了函数,甚至最后都不知道自己写那些函数想干嘛。在没有一个功能框架的情况下,先实现子功能。所以,我们需要更好的策略。{
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("注册成功");
}
这样,我们就定义了流程的逻辑过程。不会写多了函数,也不会写少了函数,也不会逻辑混乱。{
tb_user user = this.GetUserInfo();
if( this.CheckData( user ) )
{
this.RegUser( user );
}
this.RedirectToSuccessPage("注册成功");
}
然后,VS2005会提示我们,有几个函数没有定义。我们使用VS2005帮我们自动生成一个定义。
生成的结果如下:
void CheckData( tb_User user )
{
throw new Exception("函数示定义");
}
{
throw new Exception("函数示定义");
}
我们直接改函数体就行了。可以在很多比较复杂的逻辑过程函数中使用此方法。