针对方法,文中提到了几个规则,我认为比较有价值的几个列在下面。

1.      短小。好的方法是只做一件事情。

那么如何判断一个方法是做了一件事情呢?根据Clean Code的描述,是指的方法所作的事情在同一个抽象层级上。比如 Render page with setup and teardown,这个方法是在Render 一个page,它有两个步骤,这两个步骤又是在同一个抽象层级上,所以分别各为一个函数。

renderPageWithSetupAndTearDown(){

….

renderPageWithSetup();

renderPageWithTearDown();

….

}

还有另一个原则,那就是看看函数是否可以再进行拆分。

我的一个实践就是从业务角度描述这个函数所作的事情,如果一句话能够描述清楚,那么它所作的就是一件事情。如果描述不清楚,那就需要进行拆分。

2.        不要重复自己

3.        要有一个好名字,能够准确描述它所要表的业务含义。

最近有这样一个场景:

收到一个请求,检查请求中携带的ticketId是否在数据库存在,如果存在需要删除,如果不存在将请求导航到登录页面。

从业务角度来讲,是检查请求中TicketId是否合法,合法就将请求中的user放到Session中随后使其其无效,否则将请求导航到登录页面。而从实现角度是检查数据库里是否存在这个ticketid,如果存在就删除。这个方法一开始也是这么命名的,CheckAndRemove。很明显但我们看到这方法的时候只能知道这个方法是在检查删除,但是针对什么样的场景和上下文呢,一点都没有得到。这个从实现角度的命名不能反映它真正想要表达的业务逻辑,后来我们将它改为Validateticket。

ValiateTicket(Guid ticketId){

If(IsTicketValid()){

PutUserInSessionAndDeactivateTicket();

}

redirectToLogin();
}

肯定还有更好的命名。不过这个名字相对checkAndRemove更能表达一些业务的含义,在重构的时候就不至于迷失了方向。我们可以在有了新的想法的时候再对其进行重构。

转载于:https://www.cnblogs.com/adudu/archive/2011/09/01/2162033.html

如何写一个好的方法-读Clean Code 有感相关推荐

  1. 给 IConfiguration 写一个 GetAppSetting 扩展方法

    给 IConfiguration 写一个 GetAppSetting 扩展方法 Intro 在 .net core 中,微软已经默认使用 appsettings.json 来代替 app.config ...

  2. [js] 手写一个trim()的方法

    [js] 手写一个trim()的方法 function trim(str) { if (str[0] === ' ' && str[str.length - 1] === ' ') { ...

  3. appsetting mysql_给IConfiguration写一个GetAppSetting扩展方法(示例代码)

    给 IConfiguration 写一个 GetAppSetting 扩展方法 Intro 在 .net core 中,微软已经默认使用 appsettings.json 来代替 app.config ...

  4. java手写一个分页的方法_java web手写实现分页功能

    现在很多流行的框架,都可以很快的把分页效果做出来,但是作为一名程序员你必须得知道手写分页的流程: 场景效果: 一.分页的思路 首先我们得知道写分页代码的思路,保持思路清晰,才能行云流水的去写代码,其实 ...

  5. java让一个方法等待_如何写一个“等待”的方法?

    只需将您的方法转换为任务 . 像@Romiox我通常使用这个扩展 public static partial class Ext { #region Public Methods public sta ...

  6. 通过生成器写一个日志调用方法

    要求: 代码: import loggingdef logging_data(filename, channel='terminal'):logger = logging.getLogger()log ...

  7. java写一个结婚的方法_一份结婚流程 作为你结婚的Project管理不错哦

    1.婚礼筹备计划 1.1.决定婚礼日期.地点.仪式及婚宴方式 1.2.确定婚礼预算 1.3.草拟客人名单 1.5.确定伴郎.伴娘 1.6.确定主婚人.证婚人 2.婚礼前准备 2.1.2.发喜贴给亲友 ...

  8. 华为快应用-怎样写一个全局的变量和方法

    看过博主其他博客的都知道博主是做iOS出身,后来学的前端,Java,weex,快应用这些,思想上总是偏向于iOS,所以在快应用中也总想着能写一个全局的方法,现在就把这个经验分享出来: 在快应用的工程中 ...

  9. 从零开始写一个抖音App——Apt代码生成技术、gradle插件开发与protocol协议

    1.讨论--总结前两周评论中有意义的讨论并给予我的解答 2.mvps代码生成原理--将上周的 mvps 架构的代码生成原理进行解析 3.开发一款gradle插件--从 mvps 的代码引出 gradl ...

最新文章

  1. 新概念机房运维监控三大新理念
  2. TypeError: Class advice impossible in Python3. Use the @Implementer class decorator instead
  3. 【开发环境】PyCharm 打开现有 Python 工程 ( 配置 Python 编译器版本 )
  4. 数字信号处理学习笔记(五)|有限脉冲响应数字滤波器的设计
  5. iOS 里面如何使用第三方应用程序打开自己的文件,调用wps其他应用打开当前应用里面的的ppt doc xls...
  6. for循环中pairs与ipairs的区别与联系
  7. 玩转oracle 11g(1):Oracle 11g的安装
  8. java 线程 状态 图_Java提高——多线程(一)状态图
  9. [URAL1962]并查集
  10. 01 | 基础架构:一条SQL查询语句是如何执行的?笔记(转)
  11. Android系统性能优化(44)---全面详细的内存优化指南
  12. 基础学习总结(一)--工程结构与打包过程
  13. Android 属性动画简单分析(一)
  14. 21岁雅虎卖身引发一波怀旧 市值曾高达1250亿美元
  15. 十年前加入互联网改变世界,十年后加入顶级微信团队一起炸屎
  16. e admin admin.php,EAdmin极简社区源码
  17. keep T 不是 KG等级_Lifestyle | 做Keep没有动力?一周的健身计划都在这里了!
  18. Android高德地图poi检索仿微信发送位置
  19. KDZD606绝缘服试验装置
  20. 杀毒软件的Linux版,Linux杀毒软件免费版下载

热门文章

  1. 常用开源工具、框架收藏
  2. ADB server didn't ACK的解决方法
  3. 特殊方法,类之间的关系,分页
  4. location.search
  5. 【BZOJ】3779 重组病毒
  6. ESXi 功能 (看到的觉得有用就发出来了)
  7. 更改chrome临时目录(可举一反三)
  8. Grunt 入门指南5:项目脚手架
  9. 'adb' 不是内部或外部命令,也不是可运行的程序或批处理文件
  10. Android 通过腾讯WebService API获取 地址经纬度