"你懂什么?"
"我懂.net,mfc,atl,owl( c++ builder 庫),windows api"
"那么如果我現(xiàn)在的項目里不需要你說的所有的這些東西,你還能做什么?"
"那么,恐怕我做不了什么。"
如果那個人是你的話,那么我覺得你還沒真正的入行。以前我記得有個帖子曾經(jīng)這么提問過"以后windows沒有windows api了,沒有mfc了,將是.net的天下,vc++ 程序員要失業(yè)了".那么如果沒有windows api你就失業(yè)了,那么只能說你確實不是真正的c++程序員。
那么真正的軟件開發(fā)都該包括些什么呢:
實際上在軟件的世界里,真正重要的是思想,而不是工具本身。
1:應用程序框架:
除了我們常說的"net,mfc,atl,owl( c++ builder 庫),windows api",實際上還有很多的應用程序框架比如QT,java他們都是跨平臺的庫。但是所有的應用程序框架庫,他們對應的類名和函數(shù)可能千差萬別,但是他們的對應的核心的思想都一樣:大不了就是一個復合的可以任意層次組合的樹形的UI窗口部件,窗口部件通過事件的機制通知外部應用程序。
并且他們都會致力于解決一些通用的計算機問題:比如序列化,運行時類型識別,異常處理,消息路由,通用的一致的間接函數(shù)調(diào)用Invoke etc。
UI上都會提供菜單,工具欄,對話框等等一系列的基本的元素。理解了這些。什么框架還不都一樣。
2: view顯示,data定義,算法
并且實際上在一個分層設計的系統(tǒng)里,UI和應用程序框架把原始鼠標鍵盤消息傳遞到邏輯業(yè)務層的工作量實際上在一個大的系統(tǒng)里一般就占1/8左右的工作,并且整個技術(shù)難度也不大。剩余的view,data, 算法才是軟件的核心。
3:軟件架構(gòu)設計
并且軟件框架設計思想本身也完全和應用程序框架沒什么關系,它最多只能會借助c++的特性(封裝,繼承,多態(tài))去實現(xiàn)而已。這里我還想說的其實我們的很多的好設計可以直接借助很多好的庫里的好的設計靈活應用到我們的系統(tǒng)中:比如COM思想,ATL實現(xiàn)COM的實現(xiàn)手法STL思想和實現(xiàn)手法,MFC,WTL,OWL等思想和手法。COM真是個好東西,也許你永遠也不會真正的用ATL,或MFC去做COM,但是你可以根據(jù) COM的思想去構(gòu)建一個好的龐大的靈活的大的系統(tǒng)。