模块设计
或许以为功能不难,给个人需求就简单几句话。在编码以前我想弄清楚本身开发的模块是怎么样的,该怎么与外界交互。我要找到个工具将这点弄明白,因而想到画UML图。html
UML活动图
看UML建模之活动图介绍(Activity Diagram)了解了一下,画活动图比较好,感受这个大概能达到个人目的。因而画了以下两个图,分别表示IAP两个阶段发生的事:git


简单介绍
当时了解到的需求是只用提供Web调用的接口,参照Android的设计,我觉得本模块只用负责逻辑处理部分,不涉及UI展现,因此设计了以上活动图,个人工做主要是App部分。后来需求改了。github
需求改变
- 本模块负责IAP全部事项,包括UI展现
- 本模块须要能被原生App调用
- 考虑到虚拟币商品的固定性,简化购买过程
- 虚拟币商品比较固定,展现商品时能够拿本地商品信息展现,而不用等到App Store返回商品信息
- 将请求商品信息与购买商品合并到“肯定支付”过程当中
UML时序图
需求更改后活动图有变化,可初版代码编写后,模块与外界的交互已经比较好理解,我就没再上新图了。我用另一种图肯定了模块内的设计。顺便学习一下时序图工具

简单介绍
- 调用者
- ViewController:这里是App原生调用代码。考虑到易嵌入性,我此次放弃使用代理方式,而选择了Block做为反馈处理。希望代码中没有出现Cycle Retain。
- IAP模块
- IAPViewController:模块的主要处理类,负责与用户交互,及调用IAPManager与IAPObserver 与App Store进行交互;
- IAPManager:负责处理请求商品信息;
- IAPObserver:负责处理购买商品。
IAPManager和IAPObserver只将过程信息打成log,错误信息提示等与用户交互相关的处理经过Block交给IAPViewController。学习
Demo
iapTest编码
后续
- UML图是利用在线工具processon画的,保存什么的仍是很方便,不过功能不及EA等;
- 设计与代码都在学习中,欢迎一块儿交流。