自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

對(duì)架構(gòu)師的一些理解

開發(fā) 架構(gòu)
架構(gòu)師是一個(gè)被人形容必須要取消的職業(yè)。下面就會(huì)談到一些對(duì)架構(gòu)師的理解,包括MFC中的框架思想。

在討論架構(gòu)之前,我們先上道菜,青椒土豆肉絲,這道小菜味道還是不錯(cuò)的,自私點(diǎn)了,不考慮您是否喜歡,今天就上它了。

準(zhǔn)備原材料:食用油、青椒、土豆、肉絲、大蔥、香醋、雞精和食鹽。當(dāng)然根據(jù)需要您可以再加入其他輔料。把青椒、土豆、肉片都切成絲,大蔥切好,OK,一切準(zhǔn)備就緒,開火,往鍋里加油,等油熱后,放切好的蔥片,聞到蔥香,放肉絲,稍微加些醬油,爆炒,接著放土豆絲和青椒絲,等八成熟,撒些雞精和食用鹽,出鍋。

細(xì)心的讀者可能發(fā)現(xiàn),剛開始的時(shí)候我好像并沒(méi)有準(zhǔn)備醬油,是的,我確實(shí)沒(méi)準(zhǔn)備醬油,坦白的講,有時(shí)候當(dāng)鍋里的油熱的時(shí)候,我突然發(fā)現(xiàn)蔥忘記洗了,更談不上切成蔥片了,此時(shí)我會(huì)匆匆忙忙的去洗,去切,甚至有時(shí)候慌里慌張的把手給切破。

通過(guò)我們做上面的一道菜,我們總結(jié)了以下幾點(diǎn):

總結(jié)1:巧婦難為無(wú)米之炊,我們要想做好這道菜,需要原材料;

總結(jié)2:這些原材料以時(shí)間為軸心他們彼此之間是有順序關(guān)系的;

總結(jié)3:可能在某一步驟里,我們突然想添加些事先并沒(méi)準(zhǔn)備好的原材料;

總結(jié)4:一旦形成熱油鍋,似乎你要在這么短的時(shí)間內(nèi)完成這些動(dòng)作,做過(guò)飯的朋友更能體會(huì)到這句話。

言歸正傳,以軟件的思想去考慮上面的業(yè)務(wù)(事情),原材料,你可以理解為類庫(kù);順序關(guān)系,你可以通過(guò)事件來(lái)描述;事先并沒(méi)準(zhǔn)備好的原材料,你可以通過(guò)接口(抽象類、虛函數(shù)等),讓用戶重載去實(shí)現(xiàn);到這里你會(huì)發(fā)現(xiàn),一旦打開“煤氣”,去“引爆”預(yù)先設(shè)計(jì)的事件、接口,就好比多米諾骨牌一樣一個(gè)接一個(gè)的傳遞下去,在某一時(shí)刻,它會(huì)檢查是否放了“蔥片”、是否放了“肉絲”,不好,“食用油”你就沒(méi)放,還炒什么菜,扔出異常……

是的,上面就是框架,要想設(shè)計(jì)一個(gè)好的框架,看來(lái)我們首先要知道“青椒土豆絲”的做法,它大概需要哪些“原材料”,以及這些“順序關(guān)系”該如何通過(guò)具體的語(yǔ)言去實(shí)現(xiàn);當(dāng)然了,要炒出“不同的菜”,具體的原材料和順序關(guān)系又是不同的。下面通過(guò)分析幾個(gè)大家比較熟悉的框架來(lái)更詳細(xì)的說(shuō)明。

MFC框架:

MFC中的框架思想采用了MVC的思想,其中CWinApp是全局型的,整個(gè)程序的引爆也是其在“搞鬼”,在其內(nèi)部有指向文檔模版的指針,而模板又攘括了視圖、視圖的管理者(就是那個(gè)frame)和文檔類,順序關(guān)系是靠消息泵來(lái)推動(dòng)。通過(guò)下面的調(diào)用關(guān)系可以看到各個(gè)類的“相互依存”(說(shuō)明:下面的表摘自網(wǎng)絡(luò))


從該對(duì)象 如何訪問(wèn)其他對(duì)象
全局函數(shù) 調(diào)用全局函數(shù)AfxGetApp可以得到CWinApp應(yīng)用類指針
應(yīng)用 AfxGetApp()->m_pMainWnd為框架窗口指針;用CWinApp::GetFirstDocTemplatePostion、CWinApp::GetNextDocTemplate來(lái)遍歷所有文檔模板
文檔模板 調(diào)用CDocTemplate::GetFirstDocPosition、CDocTemplate::GetNextDoc來(lái)遍歷所有對(duì)應(yīng)文檔
文檔 調(diào)用CDocument::GetFirstViewPosition,CDocument::GetNextView來(lái)遍歷所有和文檔關(guān)聯(lián)的視圖;調(diào)用CDocument:: GetDocTemplate 獲取文檔模板指針
視圖 調(diào)用CView::GetDocument 得到對(duì)應(yīng)的文檔指針; 調(diào)用CView::GetParentFrame 獲取框架窗口
文檔框架窗口 調(diào)用CFrameWnd::GetActiveView 獲取當(dāng)前得到當(dāng)前活動(dòng)視圖指針; 調(diào)用CFrameWnd::GetActiveDocument 獲取附加到當(dāng)前視圖的文檔指針
MDI 框架窗口 調(diào)用CMDIFrameWnd::MDIGetActive 獲取當(dāng)前活動(dòng)的MDI子窗口(CMDIChildWnd)

您可以試著聯(lián)想“炒菜”的過(guò)程去思考上面的這張表,如果您真的理解了,我相信您會(huì)覺(jué)得他們之間沒(méi)有什么區(qū)別(不過(guò)坦白來(lái)講真的理解并沒(méi)有那么容易),好吧,你可能又發(fā)出疑問(wèn)?如果去做“填空題”?在MFC里是通過(guò)處理消息來(lái)實(shí)現(xiàn)。那么為什么沒(méi)有采用虛函數(shù)及多態(tài)來(lái)實(shí)現(xiàn)?這個(gè)問(wèn)題問(wèn)的很好,不過(guò)我沒(méi)打算在這里進(jìn)行說(shuō)明,你可以在侯杰的《深入淺出MFC》里找到答案。(我不是有意來(lái)推這本書,實(shí)在沒(méi)看到其他更好的)??赡苣銖膩?lái)沒(méi)接觸過(guò)MFC,那就不要去思考了,下面舉另外一個(gè)例子。

asp.net:

asp.net的webForm以其容易上手而著稱,如果你深入的理解了其頁(yè)面生命周期后,你會(huì)發(fā)現(xiàn)這好像又是在“炒菜”,而我們要做的只是在不同的“炒菜步驟”內(nèi)去定制我們的一些小創(chuàng)意,可能在Page_PreInit里、在Page_Init里、在Page_Load里或其它事件里,無(wú)論如何,您逃不過(guò)如來(lái)佛的手掌心,你要做的工作,就是在這些事件里去定制,換句話說(shuō),你搞不出來(lái)“宮保雞丁”,想搞個(gè)“宮保雞丁”該怎么辦?asp.net MVC 粉墨登場(chǎng)……自己可以分析下,這里就偷懶省略了。

從炒菜到實(shí)例分析,現(xiàn)在我們基本上對(duì)軟件架構(gòu)有了一個(gè)大概的認(rèn)識(shí):

認(rèn)識(shí)1:框架架構(gòu)是有邊界的,不光如此,你必須有全局的概念才能去設(shè)計(jì)框架。所謂邊界是針對(duì)不同的業(yè)務(wù),比如MFC是針對(duì)傳統(tǒng)的桌面程序,當(dāng)遇到WEB時(shí),似乎就不怎么靈光了,不然微軟不會(huì)花費(fèi)那么多功夫去推.NET。

認(rèn)識(shí)2:框架的實(shí)現(xiàn)是組件的相互關(guān)聯(lián)(通過(guò)接口,事件等),如果你手里有些基本的類庫(kù),不要告訴我是框架。

認(rèn)識(shí)3:設(shè)計(jì)框架不是為了好玩(其實(shí)它本身并不好玩),因?yàn)槟阋獮?ldquo;兩個(gè)人”負(fù)責(zé):業(yè)務(wù)和使用框架的人。建立在你框架上的應(yīng)用必須能解決你實(shí)際的業(yè)務(wù)問(wèn)題,同時(shí)要考慮怎么樣讓開發(fā)人員能“懶惰”下來(lái),比如就是做做填空題。

認(rèn)識(shí)4:設(shè)計(jì)框架要有一個(gè)好的框架思想,和具體語(yǔ)言無(wú)關(guān),但你必須明白,不同的語(yǔ)言,甚至相同的語(yǔ)言去實(shí)現(xiàn)的方式又不相同,比如MFC采用了宏來(lái)實(shí)現(xiàn)消息機(jī)制,而asp.net內(nèi)采用虛函數(shù)等來(lái)實(shí)現(xiàn)多態(tài)。

認(rèn)識(shí)5:你要時(shí)刻明白,接下來(lái)可能炒的菜就是“宮保雞丁”,也就是說(shuō)你要知道自己在干什么,要熟悉自己的“業(yè)務(wù)”,比如當(dāng)你設(shè)計(jì)MFC框架時(shí),你要考慮一個(gè)傳統(tǒng)的桌面程序要解決的大部分問(wèn)題會(huì)是什么?比如打印,比如進(jìn)程通信,比如文件操作,比如音視頻,數(shù)據(jù)庫(kù)操作,ole,等等。同樣的,當(dāng)你來(lái)設(shè)計(jì)ASP.NET時(shí),因?yàn)檫@道菜是針對(duì)HTTP的,這個(gè)時(shí)候你如果連HTTP是什么都不知道,我想你炒不好這道菜。

OK,我想這篇文章該結(jié)束了,因?yàn)槲覀兊?ldquo;菜已炒好”,如果你認(rèn)真仔細(xì)的看到這里,估計(jì)已經(jīng)浪費(fèi)了你近五分鐘的時(shí)間,希望能給你帶來(lái)點(diǎn)思考,比如:架構(gòu)師就是來(lái)“炒菜”,可能吧,也可能我的觀點(diǎn)并不完全正確。不過(guò)我歡迎聆聽每個(gè)朋友對(duì)架構(gòu)的理解。謝謝。

原文鏈接:http://www.cnblogs.com/daoxuebao/archive/2012/06/14/2549967.html

【編輯推薦】

  1. 架構(gòu)師向左,項(xiàng)目經(jīng)理向右??
  2. 淺談Web自動(dòng)化測(cè)試原理
  3. 百度首席架構(gòu)師眼中的架構(gòu)
  4. 給用戶和開發(fā)者最佳的.Net框架部署方案
  5. XQuery 開發(fā):一種更好的數(shù)據(jù)庫(kù)編程語(yǔ)言

責(zé)任編輯:彭凡 來(lái)源: 博客園
相關(guān)推薦

2022-12-27 09:56:34

架構(gòu)系統(tǒng)

2012-06-17 12:58:04

架構(gòu)師架構(gòu)

2020-12-03 07:35:06

架構(gòu)師

2022-09-01 11:02:42

前端工具

2021-01-29 09:18:09

技術(shù)研發(fā)架構(gòu)

2009-07-21 09:55:45

iBATIS分頁(yè)

2020-09-29 10:42:30

kurbernetes開發(fā)云原生

2009-07-21 09:29:27

iBATIS使用

2015-09-14 08:57:20

設(shè)計(jì)設(shè)計(jì)師

2019-06-13 18:50:47

支付平臺(tái)架構(gòu)設(shè)計(jì)

2017-04-08 17:12:36

設(shè)計(jì)模式抽象策略模式

2012-11-09 10:46:24

Canonical

2013-04-19 10:01:19

jQueryJS

2021-01-14 23:24:38

incaseforma蠕蟲病毒

2014-04-09 18:01:42

京東

2021-04-16 08:49:55

JavaScript技巧參數(shù)

2012-08-13 09:55:22

架構(gòu)師

2011-04-27 09:21:09

程序員

2013-07-18 16:16:51

2013-08-21 13:47:29

PhoneUDIDUUID
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)