单一功能原则表明,类或模块应有且只有一条加以修改的理由 。
假设我们正在建立一个需要某种报告以及显示报告的系统 。比较朴素的做法是构建一个存储报告数据以及用于显示报告的逻辑模块/类 。但是,这违反了单一功能原则,因为修改该类的高层原因出现了两个 。首先,如果报告字段发生变化,我们需要修改类;其次,如果报表可视化要求发生变化,我们也需要修改类 。因此,我们不提倡利用一个类存储数据和显示数据的做法,我们应该将这些概念和所有权区域划分为两个不同的类,例如ReportData和ReportDataRenderer等 。
文章插图
函数不能有副作用副作用确实是罪恶之源,因为副作用的存在,编写没有错误的代码会非常困难 。看看下面的例子,你能看出副作用吗?
functiongetUserByEmailAndPassword(email, password) {
let user = UserService.getByEmailAndPassword(email, password);
if (user) {
LoginService.loginUser(user); //Log user in, add cookie (Side effect!!!!)
}
return user;
}
根据函数名所示,这个函数的目的是通过电子邮件/密码组合查找用户,这是所有Web应用程序的标准操作 。然而,如果你没有阅读代码的实现,就不知道这个函数还有一个隐藏的副作用:在用户登录时,创建一个登录令牌,将其添加到数据库中,然后将cookie发送给用户,而用户则“成功登录” 。这中间有很多问题 。
首先,不阅读实现代码就不知道该函数的功能/接口 。即使你通过文档说明该函数登录的副作用,也仍然不是理想的做法 。工程师喜欢使用现代IDE中的智能提示,因此当遇到一个简单的函数名时,大部分人都不会阅读相应的文档 。他们会利用这个函数来获取用户对象,却没有意识到他们正在请求中添加Cookie,这可能会引发很多棘手且不易发现的bug 。
其次,考虑到所有的依赖关系,测试这个函数相当困难 。你需要验证是否可以通过电子邮件/密码顺利找到用户,需要模拟HTTP响应以及登录令牌的写入 。
【别纠结,提高代码整洁度也没那么难】第三,用户查找和登录之间的紧密结合必然无法满足将来的所有用例,例如,你可能需要单独查找用户或登录用户 。换句话说,这个函数不具有前瞻性 。
文章插图
总结总的来说,你需要牢记以下四个提高代码整洁度的原则,并通过这些原则提高团队的生产力:
- 没有经过测试的代码一概不安全
- 选择有意义的名称
- 类与函数保持最小,遵守单一功能原则
- 函数不能有副作用
原文:https://engineering.videoblocks.com/these-four-clean-code-tips-will-dramatically-improve-your-engineering-teams-productivity-b5bd121dd150
推荐阅读
- 帮别人注册淘宝店安全吗 淘宝给别人开店有风险么
- 灌木茶和乔木茶的区别,茶树的形状乔木型
- 福鼎白茶鉴别,福鼎白茶的保留方式
- 高山茶好在哪,高山茶与平地茶鉴别法
- 田七的真假鉴别方法
- 西洋参的真假鉴别方法
- 茯砖茶和黑茶的区别,喝茯砖茶有什么效果
- 真假“千岛湖”牌茶叶,如何识别?
- 福建白茶区土壤详解,安吉白茶和福建白茶有什么区别
- 顾渚紫笋茶的冲泡方式,顾渚紫笋的鉴别方法