阅读程序代码的一些建议

1,业务线->整体框架

    首先应该熟悉产品的使用,有几条的业务线,在此基础下再去熟悉项目代码,找到入口点,并且跟踪代码看每一个现象大致对应的位置,尽量快的从最顶层熟悉项目的整体流程

2,各个组件

    项目基本均是如此:在主业务线上去调用各种的模块,因此,要归纳整个项目所使用到的重要的模块,它们的基本作用是什么,暂时不需要知道使用流程,实现细节,我们要明确的是它能为主业务线提供什么功能,完成什么任务。同时,组件之间一般耦合度会较小。

3,组件内部的类之间的关系

    每个组件基本是由一个或多个的类组成的,这些类肯定是有层次的,最底层的是实际的动作处理,然后一步一步的封装,添加自己的逻辑实现,并形成了最顶层的类(一般来说,最主要的顶层类只有一个是最好的),而在主业务线可见的应该是这个顶层类,在主业务线上调用顶层类的方法来实现功能。

    当然,由底层往顶层的封装要考虑周全、完美,这是为了当修改bug的时候,尽量在接近顶层中修改,因为,若是一个bug需要修改底层的代码,那么,很可能出现的问题是,要往上层接着修改,造成链式效应。

    在一个组件的所有类中,我们在使用的时候应当最关注的是顶层部分,数据在各层之间的交付及实现细节也需要清除

4,类的内部

    在类的内部,在使用的时候最应该关注的当是public部分,因为,这一部分是外部可见的,这个类在被使用的时,就是通过publice部分来访问该类,而private量是仅在本类中使用的,是被本类中的其他方法调用以完成一部分功能的作用。总之,使用的时候应当关注public部分,而具体细节则应当理解private部分

    对于一个类中的某个方法,首先应当明确是public还是private,然后,find usages可以明确是在哪里被调用的(为谁服务)。该方法能提供什么作用(返回值,修改全局变量之类的),又需要什么参数(形参,全局变量等),

5,方法内部和代码块

    程序的逻辑共三种,1)顺序 2)选择 3)循环

    一般说来,顺序必定有的,我们可以看做是一个方法的主线(就算程序只有一句也算顺序)。而选择和循环的地位是相同的,可以相互嵌套之类的,一个方法的逻辑应当是在顺序中加入2)和3)。

    首先,将方法中的选择(if else和switch均看做一个整体)或循环都看做一个小整体,这样就得到方法的顺序主线,按照顺序逻辑走一遍。然后再对顺序主线中的小整体进行分解。

    方法:选择逻辑中,当出现if(){}逻辑块,我们可以理解为:当满足某个特殊条件时,就执行方法体。因此处理方法是,我们先假设该特殊条件不成立,先理清楚此时顺序主线的执行情况,最后,再加上满足这个特殊条件的时候,顺序主线逻辑会发生什么样的改变;当,有if else时,表示两个逻辑块只执行一个分支,这时候有两种情况:一,通常会把正常情况下的执行逻辑放到if中,而else块相当于一个有错时应做出的处理,最好是else语句块永远不要执行,不要出错。此时,我们应该关注的是if块中的执行逻辑。因此处理方法是,最好将if块中的语句直接添加到顺序主线逻辑中,因为程序正常运行方向,是不需要走到else中去的;二,if和else两个逻辑块都重要,只是条件的不同做出不一样的处理方式,这种情况下可以和遇到switch时一样的处理,因此处理方法是,我们需要在此处将顺序主线弄成分支,每个分支都可能会被执行(但一次只能执行其中一个)。

    总结:总之,阅读程序:应当先以整体思维(广度),再以具体(深度),最后回到整体上去理解。这种广度和深度定义是相对的,例如,一个方法中的顺序主线,对整个类而言是深度以具体的,但是对这个方法而言是广度的。在对待这里5个问题都应该以这种方法:广->深->广。

猜你喜欢

转载自blog.csdn.net/quick_snail/article/details/80840404