程序常用的设计技巧

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 程序常用的设计技巧

一、背景


程序的定义:程序=数据+算法+接口

 

二、常用技巧


技巧1 - 按目标设计接口做幂等设计


- 场景


背景:做任务赚积分。前端发出增加积分请求,如果收不到响应会重试。

 

后台开发人员:怎么判断是重试还是另一次请求?

 

解决方案:接口定义中需要传入原来积分是多少,增加到多少。开发人员直接将目标结果入库。

 

疑问:那实际生产环境发现了原来积分一样,增加到多少不一样的结果怎么办?

 

答疑:这说明上线的产品中肯定有漏洞或bug。怎么办?改bug呗!

 

- 解析


幂等性设计的定义:一次和多次请求某一个资源应该具有相同的副作用。直白点讲就是多次重试可以多次查询,但是修改更新应该只进行一次。

 

作为开发正确的观念应该是外部调用失败是常态,并且失败之后必然有重试。


不要靠巧合编程  --《程序员修炼之道》

 

技巧2 - 多版本并发控制解决并发问题


- 场景


背景:上文中的做任务赚积分,后台收到了增加积分请求。

 

开发人员:为了避免重试,我该怎么写代码呢?

 

解决方案:


update XXX set score=XX where score=X

 

- 解析


多版本并发控制MVCC(MultiVersion Concurrency Control)的定义:该策略主要使用update with condition(更新带条件来防止)来保证多次外部请求调用对系统的影响是一致的。这也是「乐观锁」的主要思想。

 

乐观锁的定义:假设最好的情况,数据在变更的时候不会被别人更新,如果更新了,某个值就会改变。所以就用这个值来作为判断条件,只有条件为真才更新成功。

 

总是为并发进行设计  --《程序员修炼之道》

 

技巧3 - 预判断准入控制避免「箭头型」代码


- 场景


背景:上文中后台收到了增加积分请求,传入了一个负数的积分。

 

开发人员:我就if 正数 才往下执行就好了呀?

 

结果:一层层的判断下来,代码变成这个样子。


1112728-20190226113652368-53610251.png


疑问:怎么解决这种复杂的「箭头型」代码问题呢?

 

答疑:「卫语句」在预判断时做准入控制。

 

- 解析


卫语句(guard clause)的定义:先对异常情况做检查,异常则直接返回。


最终一个请求被完美的分成预判断检查和正式执行两个部分,逻辑清晰,简单明了。

 

早重构,常重构  --《程序员修炼之道》

 

技巧4 - 异步设计分离响应和执行


- 场景


背景:上文的增加积分,并发量太大,因此采用了队列设计,大量请求排队等待数据库变更。

 

开发人员:这样后台接口部分很容易都在等着响应,服务被拖死。

 

解决方案:准入校验做充分,请求放到队列里后直接给用户返回操作成功。

 

疑问:万一最后失败了呢?

 

答疑:知道失败了还不修数据吗?数据补偿保证最终与对用户承诺一致撒。

 

- 解析


1/3/5秒原则:在1s以内得到响应,用户会觉得系统响应很快,体验非常好;1-3秒得到响应,用户可以接受,体验还不错;3-5秒才响应,用户就感觉慢了,体验有点糟糕;一旦响应超过5秒,用户就会认为是个失败的体验,选择离开或重新发起请求。

 

三、总结


思考!你的工作!  --《程序员修炼之道》

 

相关文章
|
2月前
|
算法 程序员
程序代码设计步骤
程序的设计过程,并不是立刻就进行代码设计,一般来讲包括设置文件的存放位置、说明书的设计、代码设计、程序测试、程序调试、注释说明。
62 7
|
2月前
|
Java 调度
代码打造每日任务系统
在游戏开发中,每日任务系统对提升玩家活跃度和留存率至关重要。通过Java的面向对象特性,可将每日任务抽象为`Task`类,并通过实例化及方法调用实现任务创建、执行与奖励功能。进一步,可以创建`DailyTaskSystem`类来管理所有每日任务,包括添加、删除和获取任务列表等操作。这种设计不仅简化了任务管理,还增强了游戏的可玩性和吸引力。更多细节和实现方法可见相关游戏逻辑设计与具体需求。
39 0
|
6月前
|
小程序
开发小程序只要几百块?
开发小程序只要几百块?
1044 0
|
6月前
|
SQL NoSQL Java
系统干崩了,只认代码不认人
为了保障系统的高可用和稳定,我发誓以后只认代码不认人。文末总结了几个小教训,希望对你有帮助。
系统干崩了,只认代码不认人
|
6月前
|
存储 开发工具 数据库
认识HIS系统 HIS系统的主要功能解释说明
HIS系统即医院信息系统(全称为Hospital information System) ,是指利用计算机软硬件技术和网络通信技术等现代化手段,对医院及其所属各部门的人流、物流、财流进行综合管理,对在医疗活动各阶段产生的数据进行采集、存储、处理、提取、传输、汇总,加工形成各种信息,从而为医院的整体运行提供全面的自动化管理及各种服务的信息系统。
499 5
|
6月前
|
算法 小程序 Linux
如何编写高效清晰的嵌入式C程序
如何编写高效清晰的嵌入式C程序
27 0
|
前端开发 小程序 JavaScript
开发小程序
HTML、CSS 和 JavaScript 这三种前端技术。然后学习微信小程序开发相关的技术和框架。以下是一个详细的学习路径:
266 0
|
设计模式 传感器 API
在编写RTOS代码时,如何设计一个简单、优雅、可拓展的任务初始化结构?
在编写RTOS代码时,如何设计一个简单、优雅、可拓展的任务初始化结构?
139 0
程序三大结构-系统学习一
编程从三大结构考虑问题,这样的思考方式、学习方式也有了更加深刻的认识与理解
|
Web App开发 JavaScript IDE
如何直观地理解程序的运行过程?
了解代码的执行过程是编程的基本要求。一个熟练的编程老手只需要用肉眼看着代码,就能对其运行的过程有所了解。然而对于刚接触编程不久的新手来说,这种事情就没那么显而易见了。于是在编写代码和调试代码时,一旦程序的逻辑有些复杂,就像掉进代码的迷宫,完全不知道东南西北。