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

概述

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

本篇整体框架还是采用经典的问题分析三步曲: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个月的计划

简明日志规范

(0)

相关推荐

  • 循序渐进VUE+Element 前端应用开发(13)--- 前端API接口的封装处理

    在前面随笔<循序渐进VUE+Element 前端应用开发(12)--- 整合ABP框架的前端登录处理>介绍了一个系统最初接触到的前端登录处理的实现,但往往对整个系统来说,一般会有很多业务对 ...

  • 【第765期】你不懂JS:this豁然开朗!

    前言 昨天第一篇分享就被@烛火星光发现是跟<你不知道的javascript>上册(一看就是看过书的),没看过书的童鞋也没关系,可以跟着早读君每天看一篇.今天继续由前端早读课专栏作者@Het ...

  • ES2020的这些新功能令人期待

    转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 原文出处:https://blog.bitsrc.io/es2020-has-been-finalized- ...

  • Spring认证-Spring注入集合

    您已经了解了如何使用值属性配置原始数据类型,并使用Bean 配置文件中的 标记的ref属性配置对象引用.这两种情况都涉及将奇异值传递给 bean. 现在,如果您想传递多个值,例如 Java 集合类型, ...

  • 天下徐氏一家亲!八荣八耻铭记心!

      无论您在哪里,只要您姓"徐",请您先点击上面的蓝色字"天下徐氏一家亲" 再点击"关注",即可加入徐氏大家庭,和世界各地宗亲交流.让我们携 ...

  • 左侧交易技巧的八荣八耻 买在跌跌跌放量跌...

    左侧交易技巧的八荣八耻   买在跌跌跌放量跌为荣,买在涨涨涨放量涨为耻: 卖在涨涨涨放量涨为荣,卖在跌跌跌放量跌为耻.   买在大幅下跌后放量价量背离为荣,买在大幅上涨后放量量价背离为耻: 卖在大幅上 ...

  • 班级管理的“八荣八耻”

    以思想积极向上为荣,以行为消极落后为耻 以勤奋刻苦学习为荣,以懒惰虚度年华为耻 以谦虚务实创新为荣,以骄傲虚伪守旧为耻 以遵规守纪自律为荣,以自由散漫劣迹为耻 以尊师敬长礼貌为荣,以蛮横无理顶撞为耻 ...

  • 全聚德的待客之道,年轻人最爱的光影主题餐厅,感受八荣八耻!

    总有那么一家餐厅,隔三差五就想去,不仅是因为食物好吃,还因为那里的氛围,既满足了你的味觉,也满足了你的视觉.全聚德前门店首家沉浸式品味光影主题餐厅就是既能抓住顾客的胃,又能吸引顾客的眼球的餐厅. 以传 ...

  • 邹氏祖训、八荣八耻!邹家人都要看看!

    邹氏祖训.八荣八耻!邹家人都要看看! 邹氏宗亲总会 1月6日 请点上面"邹氏宗亲总会"加入邹氏家族! 无论您在哪里,只要您姓"邹",先点上面蓝字邹氏宗亲总会,再 ...

  • 企业管理的八荣八耻

    中国企业越来越多,有优秀的企业,也有不成气候的企业,但总的来说,遵循某些原则从事经营的企业,远比那些没有原则的企业要强.也就是某些企业管理咨询公司讲的:好的企业是团队,不好的企业是团伙.下面就把好的企 ...

  • 八荣八耻

    八荣八耻"中提出"以崇尚科学为荣,以愚昧无知为耻",下列历史事件中提出过类似思想主张的是: A.洋务运动 B.维新变法运动 C.辛亥革命 D.新文化运动 4.[答案]D. ...

  • 八荣八耻内容

    「每日一善」

  • 钓鱼人的八荣八耻,总结得太到位了

    钓鱼人的八荣八耻,总结得太到位了