王争《设计模式之美》学习笔记
业务开发包括哪些工作?
- 我们平时做业务系统的设计与开发,无外乎有这样三方面的工作要做:接口设计、数据库设计和业务模型设计(也就是业务逻辑)。
- 数据库和接口的设计非常重要,一旦设计好并投入使用之后,这两部分都不能轻易改动。
- 改动数据库表结构,需要涉及数据的迁移和适配
- 改动接口,需要推动接口的使用者作相应的代码修改
- 业务逻辑代码侧重内部实现,不涉及被外部依赖的接口,也不包含持久化的数据,所以对改动的容忍性更大。
针对积分系统,我们先来看,如何设计数据库。
- id:明细ID
- user_id:用户ID
- channel_id:赚取或消费渠道ID
- event_id:相关事件ID,比如订单、评论、优惠券换购交易等
- credit:积分
- create_time:积分赚取或消费时间
- expired_time:积分过期时间
接下来,我们再来看,如何设计积分系统的接口。
- 接口设计要符合单一职责原则,粒度越小通用性就越好。但是接口粒度太小也会带来一些问题:
- 多次调用小接口,增加网络开销
- 原子操作拆成多个小接口,涉及分布式事务的数据一致性问题