1、关于模块设计
2、关于源码学习
本文是自己的一些心得体会总结,记录下来免得忘记。
1、关于模块设计
(1)明确实现的功能
先明确该模块要实现什么功能,对外提供什么服务,从而确定对外接口。对外的接口/类名可能的几种形式,XXXManager/XXXLoader/Volley/EventBus/Picasso等,起名可以自行体会。
至此,对外接口/类确定好了。
(2)分析实现这个功能需要哪些角色
一个稍微复杂点的功能并不是所有逻辑都写在一个类里面,应该有很多角色,每个角色负责其中的一部分内容。这就相当于将任务进行分拆,每个角色分配一项任务。然后每个角色根据自己负责的任务,确定接口。
至此,每个角色对应的接口/类确定好了。
(3)理清各角色之间的关系
各角色之间是相互配合工作的,所以要理清楚各角色的调用关系。
至此,各角色对应的接口/类的调用关系确定好了。
上面3步之后,整个框架的整体设计差不多出来了。
(4)细化各角色的具体工作
针对每个角色,实现自己的功能怎么实现?需要用到什么技术?这个就是具体实现类的事情。
心得体会:
上面是自己根据平时的工作经验,总结的一些关于模块设计的认识。
整个项目前后端架构设计,或者某一端的设计和模块设计的基本思想是一致的,只不过问题的粒度不一样。
当然还要多看源码,多分析别人的设计,自己多练习,或许理解的会更深刻,自己设计也会更游刃有余一些。
2、关于源码学习
之前写源码总结的时候,总是一行行去跟进具体实现,贴大段大段的代码,花大量篇幅去讲哪个类调用了哪个方法,现在看来这种方法是有问题的。首先过分注重细粒度的具体调用关系看不清整个架构,最后搞半天很重要的几个关键问题没搞清楚。
现在的体会。阅读代码期间,可以跟进每一行代码,熟悉下整个流程;在写总结时,先画出大脉络,也就是所谓的这个模块的整体设计;然后再仔细研究这个模块一些重要类的实现,提炼出其中的关键技术点。
我认为这样的源码学习方法是更有效的。梳理出源码的整体设计图这个过程,有助于提高我们的工程设计能力。研究重要类的具体实现,提炼出关键技术点,有助于提高技术实力,更加理解一些原理性的东西。
多看看小米Framework团队的人的技术博客,因为他们平时工作就是做这块的,所以自然研究的比较深入和全面,值得借鉴。
之前有看过 金字塔原理 这本书,希望再结合这本书来思考下。