软件架构之漫聊

做任何事情,其不在乎【简单和复杂】 由简单到复杂,再由复杂到简单。下面分享一下高老师的一些对软件架构的观点吧!

1、 做框架的思想很简单,就是所谓的雕刻之道,软件就如一块大理石,把多余的部分去掉,那就可以了。再比如如何做汽车的框架,为了满足汽车能在沙滩、地面、山坡上跑,我们只要把轮胎去掉,那么剩下的就是框架,做软件架构完整的API就不要写,留空位就行了。

2 、麦肯锡的思路(反向思维):当需要想完成某个目标的时候,往往一般人会想我现在应该先去做什么,然后再做什么,这样的思路往往出来的step by step 只有一种,如果反向思维,从现在目标开始反向推理出前一阶段的几种可能性,然后从分别对这几种可能性再向前推,以此类推可以形成一个树状,然后根据先有情况去除不能满足的链路,这样同样的问题 你的思路和方法以及可选择的路线就多很多,往往不是一条。这就是反向思维。

3、 如果把软件生产比作工厂,请问软件工厂的原料是什么?是需求?如果回答是需求那就错了。需求和架构没有关系。需求是桌面,架构师桌脚,桌脚要几个,什么形状和桌面没有关系,只要桌脚能够支持桌面就可以了。

4、 架构就万里长城,他是保护自己人的,是自己人能安居乐业,外面的多变都被万里长城档在外面,架构下面的可以多变,没钱就改版,改版就有钱。

5、 写框架的是强龙,写AP的是地头蛇,买主出现才有地头蛇,也就是需求出现的时候才有地头蛇。

6、软件哲学。如何让先写的call后写?引入接口和基类就能完成这个问题。

7、子接口因为都是基础基类,那么他们之间怎么new,如果他们要new也就向框架要,这样才能不违背框架的用意。

8、 框架先不要考虑太多效率的问题,效率的问题在后面慢慢修改,这样减少考虑的因素,更容易理清。

9、 强龙要有主控权,那么框架所做的事情就是能让强龙能包容改变

10、 如果不想子类集成那么就用final关键字

11、 如果两个类不要相互继承,但是要他们相互call,那么就在他们里面分别定义一个方法,相互call

12、 基类告诉子类,让子类call她,那么子类才能call基类,没有call子类,那么子类不能先去call她。

13、一般进程process是不共享的,他们在不同的位置区间,如果要跨进程的call,那么用IPC。而Process一般分Main thread;Message Quene;Main Looper。其中Main Thread是主线程,它通过Looper一直查看它的MQ,MQ记录要求做的事情,如果MQ里面出现什么事情,那么Main thread就拿到他做掉他。

14、 Main thread主要是处理UI相关的用户事件,而且一般有时间设置比如每个function不能超过5s

15、 Andriod中是通过IBinder来实现跨进程的通信。

16、 主线程一定有一个MQ一个Looper。而小线程没有,所有小线程从一开始到执行完就结束了,但是小线程不能touch UI, 只有 Main thread 可以touch Ui相关的用户事件

17、 架构师是在暗室里面抓黑猫,在没有路的情况下找出一条可行之路,所有没有步骤可言。

18、 做框架尽量把人家会抓住你的地方分开,如果实在分不开,可以当壁虎,把壁虎的尾巴给人家抓。

19、 框架的东西尽量要用c++写,因为C++ 比起Java安全,快、无反编译。

20、 做一个系统一定要而且只要你的控制中心和整合中心并且他们只有一个连接。控制中心好比大脑而整合中心好比骨骼。在控制中心可以增加状态机来增加控制力和安全性。


以上20条是关于高焕堂老师的一些观点,不过到底是不是高老师的观点,因为是学习的时候的一些Google上的笔记。

对于以上20条,我认为:一个好的软件架构不是完美的架构,是一个适合设计架构者对当时情况进行的合理的设计。但是合理不一定的正确的。

猜你喜欢

转载自jiangduxi.iteye.com/blog/583967