上次有幸參加了高煥堂老師的軟件架構的講座:
總結了下面幾點:
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。
15Andriod中是通過IBinder 來實現跨進程的通信。
16.主線程一定有一個MQ 一個Looper。而小線程沒有,所有小線程從一開始到執行完就結束了,但是小線程
不能touch UI,只有Main thread 可以touch UI相關的用戶事件。
17 架構師是在暗室里面抓黑貓,在沒有路的情況下找出一條可行之路,所有沒有步驟可言。
18 做框架 盡量把人家會抓住你的地方分開,如果實在分不開,可以當壁虎,把壁虎的尾巴給人家抓。
19 框架的東西盡量要用c++寫,因為c++比起java 安全,快,無反編譯。
20 做一個系統一定要只要你的控制中心和整合中心,而且他們只有一個并且只有一個連接。控制中心好比大腦
而整合中心好比骨骼。在控制中心可以增加狀態機來增加控制力和安全性。