概述

本文是继《编写代码的「八荣八耻」(上篇)》和《编写代码的「八荣八耻」-以开关上线为荣,以自信编码为耻 》之后,编写代码的「八荣八耻」系列的第三篇。

本篇整体框架还是采用经典的问题分析三步曲:what、why、how。

WHAT

编写代码的「八荣八耻」

1. 产品命名:以简单有趣为荣,以平庸难记为耻。

2. 单个方法:以短小精悍为荣,以冗长费神为耻。

3. 代码维护:以持续重构为荣,以停滞不前为耻。

4. 编程思想:以面向对象为荣,以面向过程为耻。

5. 程序设计:以开关上线为荣,以自信编码为耻。

6. 接口定义:以用户易用为荣,以复杂歧义为耻。

7. 断言分支:以实时报警为荣,以忽略分支为耻。

8. 报警策略:以定时调整为荣,以放弃维护为耻。

WHY

面向对象的设计中,之所以要抽象成接口,而不直接面向实现类。主要是基于「抽象比细节更长久」的理论基础,实现类可更改可替换。

调用方不需要关心接口怎么实现,只需要知道接口做什么和怎么用即可。这也注定了接口设计的两个基本指标:易懂和易用。

HOW

这里主要针对平时工作中看到的同学经常犯的三个误区做建议。

  1. 以包罗万象为耻

  2. 以需传默认为耻

  3. 以按业务定义为荣,以按技术定义为耻。

来看一下出现这个三个误区的影响三叶草:

从图中可以看出,出现这三个误区,最终会产出难懂又难用的烂接口。下面针对这三个方面给出具体的例子。

以包罗万象为耻

Elasticsearch(ES)很强大,支持很多复杂查询。做了一个查询系统,底层用了ES做存储。提供接口给上层调用。如果直接把ES接口作为自己的业务接口给上层来调用,这会很强大,想查的东西一定可以查到。但是请回家路上小心点,很可能第二天就看不到你来上班了,因为被做上层的同事给打死了。

比较好的一个实践是针对上层调用方的具体需求,产生出一个更加有针对性的接口。有很简单的入参和出参。比如ES里存的是世界地图。上层调用方是做定位的。他会输入两个参数:经度和纬度。他只需要返回一个信息:所在城市。那就自己封装好给调用方提供一个根据经纬度查询城市的接口就好了。

以需传默认为耻

这个很好理解。下面是java.lang.String类的构造方法。如果不提供只有char入参的,每次调用都需要填写默认的new String('f',-1,2),是不是很想砍人?

最悲催的是这种形式的调用:

Shit shit = crap.shit("shit",null,null,null,null,null,null);

数null数到头晕。底层封装一层撒。

以按业务定义为荣,以按技术定义为耻

其实静儿在写代码的时候经常写这样一种实现:定义一个XXXBuilder,入参是一个XXXXOption类。这是一种常见的设计模式。将各种选项放到构造器里构造出真正需要的入参。然后再交给一个接口让它去完成功能。构造入参代码举例如下:

是不是很头大?作为基础接口提供者,需要将这些复杂的技术逻辑封装好成业务领域的接口。实在是逻辑复杂也要自己提供静态的Builder工具让客户端可方便的合成。不要把这些任务交给调用方自己去完成。

上面一堆代码可以通过「策略下沉」将其抽象为一种策略,打个比方定义为:通用宿主机正常状态选项。把这个选项做成封装暴露出去,不是直接让调用方来拼这个入参。

总结

少即是多

温故知新

JAVA日志的前世今生

从技术渣到被要求改行到硅谷程序媛

跑题时间:接下来5个月的计划

简明日志规范

转载于:https://www.cnblogs.com/xiexj/p/10823523.html

编写代码的「八荣八耻」- 以用户易用为荣,以复杂歧义为耻相关推荐

  1. 编写代码的「八荣八耻」

    编写代码的「八荣八耻」 1. 产品命名:以简单有趣为荣,以平庸难记为耻. 2. 单个方法:以短小精悍为荣,以冗长费神为耻. 3. 代码维护:以持续重构为荣,以停滞不前为耻. 4. 编程思想:以面向对象 ...

  2. Python之禅+八荣八耻

    Python之禅 (The Zen of Python):是Python语言的指导原则,可以在Python命令行输入import this显示. import this >>> Th ...

  3. DevOps的八荣八耻

    被群里的好友安利了一发,周日跑去参加了一个技术讲座<云上开发与运维最佳实践>,听完两个人的演讲之后才发现主题竟然是讲运维,好在有一个人干货不少,在此记录下所得.简单追溯了一下这个DevOp ...

  4. 遵循互联网架构“八荣八耻”,解析EWS高质量架构6个维度的20个能力

    本文主要从最初的聚石塔容器服务EWS开始讲起,进而分享了EWS 高质量架构产品化的C2B方案和全渠道方案,着重说明了EWS的技术实现,包括EWS的总体架构以及EWS的功能实现等. 直播视频:点此进入 ...

  5. 转发:python的八荣八耻

    刚在逛CPyUG时看到了个主题讨论python的八荣八耻,见:http://bit.ly/4jeBor, 主题内容如下: 以动手实践为荣,以只看不练为耻.  以打印日志为荣,以单步跟踪为耻.  以空白 ...

  6. 程序员日常开发的八荣八耻!

    点击关注公众号,Java干货及时送达 今天来讲讲程序员日常开发的八荣八耻.还挺有意思的,给大家分享一下,哈哈~ 1. 以接口兼容为荣,以接口裸奔为耻 以接口兼容为荣,怎么理解呢? 很多bug都是因为修 ...

  7. 编程语言-11-编程八荣八耻及python中的荣耻观

    程序员版本的八荣八耻~ Python:编程的"八荣八耻" 1 通用版本 1.1 以接口兼容为荣,以接口裸奔为耻 一.以接口兼容为荣,怎么理解呢? 很多bug都是因为修改了对外旧接口 ...

  8. Python八荣八耻

    # Python八荣八耻# 以动手实践为荣,以只看不练为耻.# 以打印日志为荣,以单步跟踪为耻.# 以空白分隔为荣,以制表分隔为耻.# 以单元测试为荣,以手工测试为耻.# 以代码重用为荣,以复制粘贴为 ...

  9. 程序员版本的八荣八耻~

    前言 大家好. 最近整理了一个关于程序员日常开发版本的八荣八耻,还挺有意思的.给大家分享一下,哈哈~ 1. 以接口兼容为荣,以接口裸奔为耻 以接口兼容为荣,怎么理解呢? 很多bug都是因为修改了对外旧 ...

最新文章

  1. Flask-RESTful的简单使用
  2. 《JAVA练习题目11》学生类有属性姓名(字符串类型)和选修课程信息(ArrayList<Course>对象)两个属性,和三个方法
  3. lftp压缩对方服务器文件,lftp 贴心好友 备份服务器bash脚本
  4. 第四范式荣获“工业和信息化系统抗击新冠肺炎疫情先进集体”称号
  5. 再见了微服务!全面拥抱 DDD 真正的价值
  6. Java中final、finally和finalize的区别(转)
  7. python不能分配给操作员_Python:无法分配给li
  8. 支持多并发的单例有哪几种写法
  9. 解决老是提示找不到Mapper文件无法执行定义的方法问题!
  10. 固态硬盘linux提升,分析如何提升Linux的固态硬盘使用率?
  11. Unity之VideoPlayer组件——循环播放视频
  12. Resnet 18网络模型
  13. fgo服务器维护补偿,FGO游戏内显示问题修复通知 全服补偿2个金苹果
  14. 贝尔商道赚钱思维36道第09道:今之赚大钱者
  15. Python代码制作“恐龙跳一跳“小游戏
  16. TianMao订单数据分析
  17. 阿里达摩院发布2019十大科技趋势:数字身份将成为第二张身份证
  18. extern int a 和int a的区别
  19. 测试用例之QA有话说
  20. excel表格打印每页都有表头_Excel打印表格不再手忙脚乱

热门文章

  1. 日志 log4j.xml配置详解
  2. 如何自学Android
  3. 关系型数据库表结构的两个设计技巧
  4. JVM(3):Java GC算法 垃圾收集器
  5. git reset改写提交
  6. Javascript日期时间总结
  7. Mockito:一个强大的用于Java开发的模拟测试框架
  8. 从“架构师书单”讲开去
  9. 用 Hadoop 进行分布式并行编程, 第 3 部分 部署到分布式环境
  10. 程序员面试题精选100题(24)-栈的push、pop序列[数据结构]