可視化界面的軟件,是21世紀最主流的應用類型了,黑屏控制台的不適合普通用戶。
2004年左右的時候,作為普通網民,接觸的自然是可視化,准確是Windows那一套。
那個時候,Microsoft Windows 98,紅警,QQ是3個印象深刻的軟件。
大學之后,入了行,先后學習了Windows程序設計(C語言API開發)、MFC、Java Swing,Html Web,Android和iOS。
總的來說,現在Html web和Java Swing要熟悉一些,Android和iOS的界面在深入學習中,Windows和MFC基本廢棄了。
學習了這么多可視化界面的應用程序開發,回頭來看,很多地方,都是一樣的。因此,特意總結下。
我的觀念是,總結使人進步。
總的流程:
1.入口,應用程序的起點
Java Swing、Windows、iOS,是main函數。
Android,AndroidManifest.xml指定Activity,可以認為程序入口被“Android”隱藏了。
Web,入口是域名,對應到某個URL。后端是,比如Java,就是web.xml。
2.啟動流程封裝和接口
應用有了入口,就可以開始執行。
執行的過程,通常都是先執行初始化邏輯。
初始化邏輯,通常比較復雜。
應用開發平台,會把整個的流程,清晰低定義出來,然后給開發者留出很多擴展接口。
一部分接口是可選的,一部分是必須實現的。
Java Swing這種main函數的,相對簡單一點,按照咱們寫的代碼,一步步來就可以了。開發平台封裝的會比較少。
Java Web這種,web.xml各種配置,Tomcat等服務器,按照web.xml配置,初始化基本環境,servlet,listener等,
留給開發者的初始化,是通過配置servlet等方式。我的理解是,Web開發這種,初始化會比較多。
Android,和Java Swing類似,留給開發者的初始化不是很多。執行的過程中,需要資源,再初始化。
iOS,學得不久,和Android基本一致。
因此,主要分為3類:
Java Swing應用,按照main一步步來,初始化很少。
Java Web,初始化繁多,各種配置文件。
Android和iOS,初始化也很少,可以按需要來。
(個人感覺不夠准確啊,僅供參考)
3.初始化,開發者擴展接口
應用初始化的過程,會給開發者留很多“擴展的接口”,從而把自己的程序和邏輯加入進來。
Java Web中,比如用了SpringMVC框架,DispatchServlet就攔截了所有的URL,再分配到我們自己寫的各個Controller中。
Android中,配置Service和Activity等。
4.繪制界面。
Java Swing,用各種UI組件、API和布局,構造界面。
Android、iOS、Windows,也差不多。
Web Html,則是用Html和CSS比較多。
5.綁定事件。
Web前端中,JavaScript綁定click等,也可以把超鏈接的點擊,理解成標准的自帶的事件。
Android、Java等,都差不多。
綁定、移除等操作。
6.事件響應。
可以說,事件響應,才是程序的重點,開發者介入最多的地方。
每一個事件,都需要響應,響應邏輯,就是處理界面資源、動畫效果、業務邏輯的地方。
比如,用戶點擊按鈕,提交了一個表單。捕捉到這個事件,把表單存到數據庫,再給用戶一個反饋,或者跳轉到其它界面。
三種機制:
1.為1個界面組件,綁定到1個明確的函數代碼上。1對1
比如,JavaScript中,$("#submitBtn").on("click,function(){});
這種方式,比較明確,非常常見。
2.為1類界面組件,綁定1個事件。1對多。
比如,JavaScript中,$(".action").on("click,function(){});
這種方式,代碼寫起來簡潔,適合同一類的事件。在Web端比較多。
Android移動端、Java Swing等,用的比較少,沒有怎么見過。
3.不明確綁定到某個函數,使用純粹的消息機制。
印象中,Windows程序設計中,事件是真正的機遇“消息”的。
點擊一個按鈕,這個事件,是當作一個消息的。
代碼中,有專門的處理消息的地方。
我們經常看到的,把一個事件綁定到某個函數,是Android等框架簡化的結果。
從Windows程序設計中,我們可以看出,監聽事件,通常都是“循環”或者“處於等待”狀態的。
也因此,UI通常都有一個“主線程”。
事件響應,有可能會開啟新的線程。
要不然,點擊了第1個按鈕,再點擊第2個,就不響應了。
小結
總的流程:入口-系統初始化-開發者初始化-界面-綁定事件-響應事件或捕捉消息-處理業務邏輯-返回結果。
限於經驗和表達能力,只能這么大概寫一下。
細一點,就需要具體到某種技術,比如Android,需要專業的大神來解釋了。
最后
從以上,我們可以看出,在不同編程語言和GUI平台框架中,整個流程是類似的。
2000年以前,就建立了這樣的模型,后面就算是新出來的,也大致是按照這個思路的。
我們似乎可以稱之為“GUI設計模式”。
此外,在不同語言中,數據結構、算法、業務模型、語法,等很多地方都存在着很多的共性。
理解了這些共性,再找出差一點,學習新的編程語言等技術技能,就快很多。
一個人的學習能力,和總結,找規律,有很大的關系。
重復學習相同的相似的內容,花了很多無用功,理解還不夠深刻。
現在再回頭,理解初中高中的“觸類旁通”等學習境界,說的應該就是這個道理。
現在,再回頭想想咱們早期的學習方法和知識,很多還是有價值的。
知識,還是要活學活用。
現在再回頭,理解初中高中的“觸類旁通”等學習境界,說的應該就是這個道理。
現在,再回頭想想咱們早期的學習方法和知識,很多還是有價值的。
知識,還是要活學活用。
希望通過本篇,能夠給相關友人帶來一些啟發。
小雷FansUnion-專注互聯網技術和金融投資
2015年12月6日
在之前的文章中,說的是在12月7日之前,今天總算是沒有拖延~