1,多打斷點(diǎn)
2,善用跳轉(zhuǎn),分析數(shù)據(jù)入口(不太明白)
3,畫(huà)圖(數(shù)據(jù)流轉(zhuǎn)圖)
4,debug看源碼,看跳轉(zhuǎn),邊看邊注釋?zhuān)笥梦逡晥D法總結(jié)
五視圖 CSDN??https://blog.csdn.net/nnsword/article/details/78109126
轉(zhuǎn)載文章如下
在實(shí)際工作中,我們經(jīng)常聽(tīng)到“架構(gòu)”和“架構(gòu)師”這樣的名詞,并不新鮮,但是總讓很多剛?cè)腴T(mén)的?
???在實(shí)際工作中,我們經(jīng)常聽(tīng)到“架構(gòu)”和“架構(gòu)師”這樣的名詞,并不新鮮,但是總讓很多剛?cè)腴T(mén)的人感覺(jué)很神秘,甚至是高深莫測(cè)。很少有人對(duì)“架構(gòu)”有全面的了解和認(rèn)識(shí)能并說(shuō)清楚架構(gòu)是什么,更談不上掌握了。事實(shí)上,也只有極少數(shù)人能成為或者被冠以“架構(gòu)師”這樣的title。為此,筆者總結(jié)了對(duì)架構(gòu)的一些理解,希望能夠補(bǔ)充很多初入門(mén)的人在這方面認(rèn)識(shí)上的不足,糾正一些誤解。高手和老鳥(niǎo)就直接跳過(guò)吧。
對(duì)于“架構(gòu)”來(lái)講,理論上劃分了5種架構(gòu)視圖,分別是:邏輯架構(gòu)、開(kāi)發(fā)架構(gòu)、運(yùn)行架構(gòu)、物理架構(gòu)、數(shù)據(jù)架構(gòu)。根據(jù)名字,大家都可能大概能猜到其側(cè)重點(diǎn)和含義。這里先用通俗的文字簡(jiǎn)單介紹下,便于大家理解,大家可以不必糾結(jié)概念和這些理論。
邏輯架構(gòu):邏輯架構(gòu)關(guān)注的是功能,包含用戶直接可見(jiàn)的功能,還有系統(tǒng)中隱含的功能?;蛘吒油ㄋ讈?lái)描述,邏輯架構(gòu)更偏向我們?nèi)粘K斫獾摹胺謱印?,把一個(gè)項(xiàng)目分為“表示層、業(yè)務(wù)邏輯層、數(shù)據(jù)訪問(wèn)層”這樣經(jīng)典的“三層架構(gòu)”。
開(kāi)發(fā)架構(gòu):開(kāi)發(fā)架構(gòu)則更關(guān)注程序包,不僅僅是我們自己寫(xiě)的程序,還包括應(yīng)用程序依賴(lài)的SDK、第三方類(lèi)庫(kù)、中間價(jià)等。尤其是像目前主流的Java、.NET等依靠虛擬機(jī)的語(yǔ)言和平臺(tái),以及主流的基于數(shù)據(jù)庫(kù)的應(yīng)用,都會(huì)比較關(guān)注。和邏輯架構(gòu)有緊密的關(guān)聯(lián)。
運(yùn)行架構(gòu):顧名思義,更關(guān)注的是應(yīng)用程序運(yùn)行中可能出現(xiàn)的一些問(wèn)題。例如并發(fā)帶來(lái)的問(wèn)題,比較常見(jiàn)的“線程同步”問(wèn)題、死鎖問(wèn)題、對(duì)象創(chuàng)建和銷(xiāo)毀(生命周期管理)問(wèn)題等等。開(kāi)發(fā)架構(gòu),更關(guān)注的是飛機(jī)起飛之前的一些準(zhǔn)備工作,在靜止?fàn)顟B(tài)下就能規(guī)劃好做好的,而運(yùn)行架構(gòu),更多考慮的是飛機(jī)起飛之后可能發(fā)生的一些問(wèn)題。
物理架構(gòu):物理架構(gòu),更關(guān)注的系統(tǒng)、網(wǎng)絡(luò)、服務(wù)器等基礎(chǔ)設(shè)施。例如:如何通過(guò)服務(wù)器部署和配置網(wǎng)絡(luò)環(huán)境,來(lái)實(shí)現(xiàn)應(yīng)用程序的“可伸縮性、高可用性”。或者舉一個(gè)實(shí)際的例子,如何通過(guò)設(shè)計(jì)基礎(chǔ)設(shè)施的架構(gòu),來(lái)保障網(wǎng)站能支持同時(shí)10W人在線、7*24小時(shí)提供服務(wù),當(dāng)超過(guò)10W人或者低于10W人在線時(shí),可以很方便的調(diào)整部署架構(gòu)來(lái)支撐。
數(shù)據(jù)架構(gòu):數(shù)據(jù)架構(gòu),更關(guān)注的是數(shù)據(jù)持久化和存儲(chǔ)層面的問(wèn)題,也可能會(huì)包括數(shù)據(jù)的分布、復(fù)制、同步等問(wèn)題。更貼切來(lái)講,如何選擇需要的關(guān)系型數(shù)據(jù)庫(kù)、流行的NOSQL,如何保障數(shù)據(jù)存儲(chǔ)層面的性能、高可用性、災(zāi)備等等。很多時(shí)候,和物理架構(gòu)是有緊密聯(lián)系的,但它更關(guān)注數(shù)據(jù)存儲(chǔ)層面的,物理架構(gòu)更關(guān)注整個(gè)基礎(chǔ)設(shè)施部署層面。
上面講了那么多,相信國(guó)內(nèi)很少有公司是嚴(yán)格按照這五種視圖去分工和設(shè)計(jì)的。其實(shí)在筆者眼中,架構(gòu)大致分為兩種:軟件架構(gòu)、系統(tǒng)架構(gòu)。前三種視圖,可以歸納為軟件架構(gòu),而后兩種架構(gòu),則歸為系統(tǒng)架構(gòu)。這也比較符合國(guó)內(nèi)大部分中小型互聯(lián)網(wǎng)公司的現(xiàn)狀。
根據(jù)應(yīng)用特性的不同,關(guān)注側(cè)重點(diǎn)可能不同。例如,某些門(mén)戶類(lèi)的互聯(lián)網(wǎng)應(yīng)用,讀多寫(xiě)少而且業(yè)務(wù)相對(duì)比較簡(jiǎn)單,則更加關(guān)注“高性能、可伸縮性、可用性”等方面。對(duì)于更加復(fù)雜的應(yīng)用,例如電商類(lèi)大規(guī)模交易型的應(yīng)用,對(duì)每個(gè)層面和每個(gè)環(huán)節(jié)都會(huì)比較關(guān)注。對(duì)于業(yè)務(wù)型的系統(tǒng),例如一些生產(chǎn)型企業(yè)使用的ERP,或者僅供企業(yè)內(nèi)部使用的一些MIS、OA應(yīng)用,通常更關(guān)注功能和復(fù)雜的業(yè)務(wù)和實(shí)現(xiàn)和擴(kuò)展,而對(duì)性能等方面又可能不要太高,這類(lèi)應(yīng)用則更關(guān)注純軟件架構(gòu)層面。這里,不展開(kāi)做具體討論。所以很多時(shí)候,架構(gòu)師也需要是一個(gè)團(tuán)隊(duì),而不是一個(gè)人“全棧”。
在長(zhǎng)期的技術(shù)招聘面試中,我發(fā)現(xiàn)在很多人眼中,架構(gòu)就是分層,架構(gòu)設(shè)計(jì)就是“三層架構(gòu)”(或者四層、五層…反正分層越多就說(shuō)明項(xiàng)目越復(fù)雜而且架構(gòu)就越牛),或許是受到諸如PetShop之類(lèi)的示例項(xiàng)目的影響,這里暫時(shí)不去追究原因了。
之前已經(jīng)糾正過(guò)很多人的誤解-架構(gòu)不只是軟件架構(gòu)。說(shuō)一下通俗點(diǎn)的理解:
軟件架構(gòu)就是實(shí)用而且優(yōu)雅的設(shè)計(jì),它不在于分多少層,或者應(yīng)用了多少種設(shè)計(jì)模式/架構(gòu)模式等。它應(yīng)該是以滿足實(shí)現(xiàn)用戶需求為前提,以開(kāi)發(fā)人員普遍可接受為根本的,而且要符合系統(tǒng)特性和業(yè)務(wù)發(fā)展需要的,從軟件設(shè)計(jì)的角度,能夠達(dá)到層次清晰、可維護(hù)、可重用、可擴(kuò)展…就非常優(yōu)秀了,無(wú)需刻意去糾結(jié)分了多少層,是否使用了什么模式,有多么抽象等。以面向?qū)ο笤O(shè)計(jì)為例,基本目標(biāo)是“高內(nèi)聚、低耦合”,為此我們可能會(huì)遵循一些常見(jiàn)的設(shè)計(jì)原則(例如經(jīng)典的SOLID設(shè)計(jì)原則)。最后糾正一點(diǎn),通常我們所說(shuō)的模式,其實(shí)又分為很多種,并不是僅僅指的是“設(shè)計(jì)模式”(設(shè)計(jì)模式也有千千萬(wàn),并不是只有常見(jiàn)的GOF 23種設(shè)計(jì)模式)。通常包括:企業(yè)架構(gòu)模式、設(shè)計(jì)模式、SOA模式、企業(yè)集成模式等等。
強(qiáng)調(diào)一下,架構(gòu)要講求“實(shí)用”,而且開(kāi)發(fā)人員普遍可接受,要符合現(xiàn)狀的。否則,再“優(yōu)雅”的設(shè)計(jì),都會(huì)淪為高成本的“花架子”,生搬硬套和過(guò)度設(shè)計(jì)只會(huì)讓項(xiàng)目“流產(chǎn)”。
由于角色和分工不同,軟件架構(gòu)是一個(gè)復(fù)雜的整體,軟件架構(gòu)工程師不可能在一個(gè)視角、一下子講清楚,而利用多重軟件架構(gòu)視圖的方法,可以一次只圍繞少數(shù)概念和技術(shù)展開(kāi),分別著重研究軟件架構(gòu)的不同方面,使問(wèn)題得以清晰公和簡(jiǎn)化,利于軟件架構(gòu)工程師完成架構(gòu)設(shè)計(jì)工作。
因此軟件架構(gòu)的每個(gè)視圖分別關(guān)注不同的方面,針對(duì)不同的目標(biāo)和用途。目前常用架構(gòu)設(shè)計(jì)五視圖方法進(jìn)行軟件架構(gòu)描述。它們分別是邏輯架構(gòu)、開(kāi)發(fā)架構(gòu)、運(yùn)行架構(gòu)、物理架構(gòu)和數(shù)據(jù)架構(gòu)。
邏輯架構(gòu)的設(shè)計(jì)著重考慮功能需求,系統(tǒng)應(yīng)當(dāng)向用戶提供什么樣的服務(wù),關(guān)注點(diǎn)主要是行為或職責(zé)的劃分。邏輯架構(gòu)關(guān)注的功能,不僅包括用戶可見(jiàn)的功能,還應(yīng)當(dāng)包括為實(shí)現(xiàn)用戶功能而必須提供的輔助功能。邏輯架構(gòu)的靜態(tài)方面是抽象職責(zé)的劃分,動(dòng)態(tài)方面是承擔(dān)不同職責(zé)的邏輯單元之間的交互與協(xié)作。
開(kāi)發(fā)架構(gòu)的設(shè)計(jì)著重考慮開(kāi)發(fā)期質(zhì)量屬性,關(guān)注點(diǎn)是在軟件開(kāi)發(fā)環(huán)境中軟件模塊(包)的實(shí)際組織方式,具體涉及源程序文件、配置文件、源程序包、編譯打包后的目標(biāo)文件、直接使用的第三方SDK/框架/類(lèi)庫(kù)、以及開(kāi)發(fā)的系統(tǒng)將運(yùn)行于其上的系統(tǒng)軟件或中間件。
運(yùn)行架構(gòu)的設(shè)計(jì)著重考慮運(yùn)行期質(zhì)量屬性,關(guān)注點(diǎn)是系統(tǒng)的并發(fā)、同步、通信等問(wèn)題,這勢(shì)必涉及到進(jìn)程、線程、對(duì)象等運(yùn)行時(shí)概念,以及相關(guān)的并發(fā)、同步、通信等。運(yùn)行架構(gòu)的靜態(tài)方面關(guān)注軟件系統(tǒng)運(yùn)行時(shí)的單元結(jié)構(gòu),動(dòng)態(tài)方面關(guān)注運(yùn)行時(shí)單元之間的交互機(jī)制。
物理架構(gòu)的設(shè)計(jì)著重考慮安裝和部署需求,關(guān)注點(diǎn)是目標(biāo)程序及其依賴(lài)的運(yùn)行庫(kù)和系統(tǒng)軟件最終如何安裝或部署到物理機(jī)器,以及如何部署機(jī)器和網(wǎng)絡(luò)來(lái)配合軟件系統(tǒng)的可靠性、可伸縮性、持續(xù)可用性、性能和安全性等要求。
數(shù)據(jù)架構(gòu)的設(shè)計(jì)著重考慮數(shù)據(jù)需求,關(guān)注點(diǎn)是持久化數(shù)據(jù)的存儲(chǔ)方案,不僅包括實(shí)體及實(shí)體關(guān)系數(shù)據(jù)存儲(chǔ)格式,還可能包括數(shù)據(jù)傳遞、數(shù)據(jù)復(fù)制、數(shù)據(jù)同步等策略。
在運(yùn)用五視圖方法進(jìn)行架構(gòu)設(shè)計(jì)時(shí)需要注意兩個(gè)方面的問(wèn)題:一是多個(gè)架構(gòu)視圖間的同步問(wèn)題,也就是必須保證不同視圖之間是互相解釋而不是相互矛盾的;另一個(gè)是架構(gòu)視圖的數(shù)量問(wèn)題,原則上是軟件系統(tǒng)不涉及某方面的要求時(shí)就不需要該方面的視圖,嚴(yán)格控制架構(gòu)視圖的數(shù)量,但如果有需要,可以引入新的架構(gòu)視圖,從而更加突出和明確地制定和表達(dá)特定方面的架構(gòu)決策,如安全性。
構(gòu)成每個(gè)架構(gòu)設(shè)計(jì)視圖的元素不同,這些不同的元素?fù)纹鸩煌乃季S空間,從而使每個(gè)架構(gòu)視圖重點(diǎn)覆蓋不同種類(lèi)的需求,最終所有架構(gòu)設(shè)計(jì)視圖所表達(dá)的語(yǔ)義綜合左右一起,就構(gòu)成了軟件架構(gòu)設(shè)計(jì)方案。
?