如何写一个好的方法-读Clean Code 有感
针对方法,文中提到了几个规则,我认为比较有价值的几个列在下面。
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 有感相关推荐
- 给 IConfiguration 写一个 GetAppSetting 扩展方法
给 IConfiguration 写一个 GetAppSetting 扩展方法 Intro 在 .net core 中,微软已经默认使用 appsettings.json 来代替 app.config ...
- [js] 手写一个trim()的方法
[js] 手写一个trim()的方法 function trim(str) { if (str[0] === ' ' && str[str.length - 1] === ' ') { ...
- appsetting mysql_给IConfiguration写一个GetAppSetting扩展方法(示例代码)
给 IConfiguration 写一个 GetAppSetting 扩展方法 Intro 在 .net core 中,微软已经默认使用 appsettings.json 来代替 app.config ...
- java手写一个分页的方法_java web手写实现分页功能
现在很多流行的框架,都可以很快的把分页效果做出来,但是作为一名程序员你必须得知道手写分页的流程: 场景效果: 一.分页的思路 首先我们得知道写分页代码的思路,保持思路清晰,才能行云流水的去写代码,其实 ...
- java让一个方法等待_如何写一个“等待”的方法?
只需将您的方法转换为任务 . 像@Romiox我通常使用这个扩展 public static partial class Ext { #region Public Methods public sta ...
- 通过生成器写一个日志调用方法
要求: 代码: import loggingdef logging_data(filename, channel='terminal'):logger = logging.getLogger()log ...
- java写一个结婚的方法_一份结婚流程 作为你结婚的Project管理不错哦
1.婚礼筹备计划 1.1.决定婚礼日期.地点.仪式及婚宴方式 1.2.确定婚礼预算 1.3.草拟客人名单 1.5.确定伴郎.伴娘 1.6.确定主婚人.证婚人 2.婚礼前准备 2.1.2.发喜贴给亲友 ...
- 华为快应用-怎样写一个全局的变量和方法
看过博主其他博客的都知道博主是做iOS出身,后来学的前端,Java,weex,快应用这些,思想上总是偏向于iOS,所以在快应用中也总想着能写一个全局的方法,现在就把这个经验分享出来: 在快应用的工程中 ...
- 从零开始写一个抖音App——Apt代码生成技术、gradle插件开发与protocol协议
1.讨论--总结前两周评论中有意义的讨论并给予我的解答 2.mvps代码生成原理--将上周的 mvps 架构的代码生成原理进行解析 3.开发一款gradle插件--从 mvps 的代码引出 gradl ...
最新文章
- 新概念机房运维监控三大新理念
- TypeError: Class advice impossible in Python3. Use the @Implementer class decorator instead
- 【开发环境】PyCharm 打开现有 Python 工程 ( 配置 Python 编译器版本 )
- 数字信号处理学习笔记(五)|有限脉冲响应数字滤波器的设计
- iOS 里面如何使用第三方应用程序打开自己的文件,调用wps其他应用打开当前应用里面的的ppt doc xls...
- for循环中pairs与ipairs的区别与联系
- 玩转oracle 11g(1):Oracle 11g的安装
- java 线程 状态 图_Java提高——多线程(一)状态图
- [URAL1962]并查集
- 01 | 基础架构:一条SQL查询语句是如何执行的?笔记(转)
- Android系统性能优化(44)---全面详细的内存优化指南
- 基础学习总结(一)--工程结构与打包过程
- Android 属性动画简单分析(一)
- 21岁雅虎卖身引发一波怀旧 市值曾高达1250亿美元
- 十年前加入互联网改变世界,十年后加入顶级微信团队一起炸屎
- e admin admin.php,EAdmin极简社区源码
- keep T 不是 KG等级_Lifestyle | 做Keep没有动力?一周的健身计划都在这里了!
- Android高德地图poi检索仿微信发送位置
- KDZD606绝缘服试验装置
- 杀毒软件的Linux版,Linux杀毒软件免费版下载