[代码重构]利用单一职责原则(SRP)封装函数

原始的设计:

///<summary>
/// 修改密码
///</summary>
///<param name="id">主键</param>
///<param name="oldPassword">原密码</param>
///<param name="newPassword">新密码</param>
///<returns></returns>
publicbool ChangePassword(int id, string oldPassword, string newPassword)
{
oldPassword
= EncodeHelper.MD5(oldPassword.Trim());
newPassword
= EncodeHelper.MD5(newPassword.Trim());

if (!oldPassword.Equals(this.GetStudent(id).LoginPassword))
returnfalse;

returnthis.UpdateStudent(new Student() { ID = id, LoginPassword = newPassword });
}

重构的设计:

///<summary>
/// 修改密码
///</summary>
///<param name="id">主键</param>
///<param name="oldPassword">原密码</param>
///<param name="newPassword">新密码</param>
///<returns></returns>
publicbool ChangePassword(int id, string oldPassword, string newPassword)
{
returnthis.ValidateOldPassword(id, oldPassword) &&this.SaveNewPassword(id, newPassword);
}

///<summary>
/// 验证原密码
///</summary>
///<param name="id">主键</param>
///<param name="oldPassword">原密码</param>
///<returns></returns>
privatebool ValidateOldPassword(int id, string oldPassword)
{
oldPassword
= EncodeHelper.MD5(oldPassword.Trim());
return oldPassword.Equals(this.GetStudent(id).LoginPassword);
}

///<summary>
/// 保存新密码
///</summary>
///<param name="id">主键</param>
///<param name="newPassword">新密码</param>
///<returns></returns>
privatebool SaveNewPassword(int id, string newPassword)
{
newPassword
= EncodeHelper.MD5(newPassword.Trim());
returnthis.UpdateStudent(new Student() { ID = id, LoginPassword = newPassword });
}

总结:

1. 重构后的ChangePassword函数,职责更单一,逻辑也更清晰了。

2. 原来的"验证原密码",和"保存新密码"的逻辑都重新定义到了单独的私有函数。对ChangePassword函数可能的变化进行了封装和隔离。

3. ChangePassword函数返回的方式采用"逻辑与"的表达式进行运算返回,这样可以有效的"前置"了"验证原密码"逻辑错误的情况,做到了函数的提前返回。

posted @ 2011-04-04 10:39  安布雷拉  阅读(865)  评论(2编辑  收藏  举报