编写可复用和通用化代码的关键要点
1. 避免返回类型泄露实现细节
在处理用户头像请求时,工程师通常需要解读 HttpResponse.Status 枚举值来判断请求是否成功以及失败原因。这不仅要求了解 HTTP 状态码,还得知道服务器实际使用的具体状态码。例如,工程师可能会检查 STATUS_200 (表示成功)和 STATUS_404 (表示资源未找到),但还有 50 多种其他可能使用的状态码。
这使得 ProfilePictureService 的实现很难更改。调用 ProfilePictureService.getProfilePicture() 的代码必须处理 HttpResponse.Status 和 HttpResponse.Payload 类型才能理解响应,这导致基于该服务构建的代码层依赖于 HttpResponse 特定的类型。一旦需求发生变化,如应用需要通过 WebSocket 连接获取头像,就需要在多处进行大量代码更改。
更好的做法是让 ProfilePictureService 返回适合其抽象层的类型。该服务解决的问题是为用户获取头像,因此理想情况下,其返回类型应反映这一抽象层,同时尽量减少向使用该类的工程师暴露的概念数量。具体来说,需要暴露的最小概念集包括:
- 请求可能成功,也可能因以下原因失败:
- 用户不存在
- 发生某种临时错误(如服务器不可达)
超级会员免费看
订阅专栏 解锁全文
13万+

被折叠的 条评论
为什么被折叠?



