代码重构-利用单一职责原则(SRP)封装函数
原始的设计:
/// <summary>
/// 修改密码
/// </summary>
/// <param name="id">主键</param>
/// <param name="oldPassword">原密码</param>
/// <param name="newPassword">新密码</param>
/// <returns></returns>
public bool ChangePassword(int id, string oldPassword, string newPassword)
{
oldPassword = EncodeHelper.MD5(oldPassword.Trim());
newPassword = EncodeHelper.MD5(newPassword.Trim());
if (!oldPassword.Equals(this.GetStudent(id).LoginPassword))
return false;
return this.UpdateStudent(new Student() { ID = id, LoginPassword = newPassword });
}
重构的设计:
/// <summary>
/// 修改密码
/// </summary>
/// <param name="id">主键</param>
/// <param name="oldPassword">原密码</param>
/// <param name="newPassword">新密码</param>
/// <returns></returns>
public bool ChangePassword(int id, string oldPassword, string newPassword)
{
return this.ValidateOldPassword(id, oldPassword) && this.SaveNewPassword(id, newPassword);
}
/// <summary>
/// 验证原密码
/// </summary>
/// <param name="id">主键</param>
/// <param name="oldPassword">原密码</param>
/// <returns></returns>
private bool 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>
private bool SaveNewPassword(int id, string newPassword)
{
newPassword = EncodeHelper.MD5(newPassword.Trim());
return this.UpdateStudent(new Student() { ID = id, LoginPassword = newPassword });
}
总结:
1. 重构后的ChangePassword函数,职责更单一,逻辑也更清晰了。
2. 原来的"验证原密码",和"保存新密码"的逻辑都重新定义到了单独的私有函数。对ChangePassword函数可能的变化进行了封装和隔离。
3. ChangePassword函数返回的方式采用"逻辑与"的表达式进行运算返回,这样可以有效的"前置"了"验证原密码"逻辑错误的情况,做到了函数的提前返回。
zhaizi:http://www.cnblogs.com/JavCof/archive/2011/04/04/2005067.html
浙公网安备 33010602011771号