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

  • 相关阅读:
    Hash 函数资源链接汇总
    Zookeeper 初体验之——伪分布式安装
    Zookeeper 初体验之——JAVA API 初探
    布隆过滤器(Bloom Filter)详解
    7天学会Maven(第一天——了解 Maven)
    仿中关村在线首页弹出式广告插件(jQuery版)
    介绍几款在线代码编辑器
    兼容浏览 firefox、chrome、ie 的flash(swf) 的代码!
    我的Discuz!X2 、Ucenter 1.6、ASP.NET 应用程序整合经历
    2011年最后一博:仿HAO123的邮箱登录
  • 原文地址:https://www.cnblogs.com/JavCof/p/2005067.html
Copyright © 2011-2022 走看看