• [代码重构]利用单一职责原则(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函数返回的方式采用"逻辑与"的表达式进行运算返回,这样可以有效的"前置"了"验证原密码"逻辑错误的情况,做到了函数的提前返回。

  • 相关阅读:
    PCB Genesis加邮票孔(邮票孔增加方向判断--左右上下)实现算法
    PCB SLOT槽孔数量计算方法,同CAM350孔数一致 实现方法
    从上到下打印二叉树II
    数据结构与算法(2)---顺序表
    栈的压入弹出序列
    包含min函数的栈
    顺时针打印矩阵
    数据结构与算法(1)--绪论
    反转链表
    数值的整数次方(快速幂)
  • 原文地址:https://www.cnblogs.com/JavCof/p/2005067.html
Copyright © 2020-2023  润新知