# 忽略细节,就是屎

比如登录表单,输入密码后按回车键一点反应都没有,必须点击登录按钮才能登录。

## 开发忽略细节,代码一坨屎;设计忽略细节,产品一坨屎。

举个稍微复杂点的例子,`消息列表`这个功能模块。

假设有两个需求:

1. 允许用户下拉操作刷新(手动)
2. 每隔15s后台请求刷新(自动)

如果处理不当,会出现漏消息、消息重复等情况。

所有开发环节出现的屎,都能追溯到设计环节。从设计环节就需要考虑好如何规避这些问题的发生。

实践:

### 0. 消息表说明

在数据库设计章节提到了避免使用自增id。

所以就不能将消息id作为参数传递去查询,而采用时间戳的方式。

### 1. 参数带入时间戳

时间戳的选取:

1. 本次请求发起的时间 -> 下次请求可能会重复本次请求处理期间的消息
2. 本次请求结束的时间 -> 下次请求可能会丢失本次请求处理期间的消息
3. 最后一条消息记录的时间 -> 完美衔接,最佳选择

### 2. 阻止请求

如用户狂点导致的频繁刷新,或者用户手动刷新和自动刷新同时进行,都会导致获得到重复消息数据。

先进先出。前一条请求处理完成前,阻止下一条请求。

### 3. 时间戳的有效性

1. 如果返回的结果有数据,时间戳应当被更新替换掉
2. 如果返回的结果没有数据,下次请求依然使用该时间戳

## 看似简单,其实不易。