2009-11-18 15:41:38 來源:博客
應(yīng)用程序架構(gòu)
應(yīng)用程序架構(gòu)描述組成應(yīng)用程序的主要部分。例如,在 Java 世界里,應(yīng)用程序架構(gòu)都描述兩個(gè)內(nèi)容:用于構(gòu)建特定應(yīng)用程序的框架組合 — 我稱其為框架級架構(gòu) — 以及更多傳統(tǒng)的邏輯關(guān)注點(diǎn)分離,我一直稱這些內(nèi)容為應(yīng)用程序架構(gòu)。將框架架構(gòu)作為一個(gè)獨(dú)立部分,因?yàn)榇蠖鄶?shù)面向?qū)ο笳Z言的從業(yè)者已經(jīng)發(fā)現(xiàn)單獨(dú)的類不能實(shí)現(xiàn)良好的重用(您最后一次從 Internet 中下載一個(gè)單獨(dú)的類以供某個(gè)項(xiàng)目使用是什么時(shí)候?)。目前面向?qū)ο笳Z言中的重用部分都是庫或框架。當(dāng)您用提供豐富框架的語言(如 Java 語言)啟動一個(gè)新項(xiàng)目時(shí),首要的架構(gòu)關(guān)注點(diǎn)之一就是應(yīng)用程序的框架級架構(gòu)。這種重用設(shè)計(jì)在 Java 世界中獲得了巨大成功,以至于我已經(jīng)開始認(rèn)為我們應(yīng)當(dāng)停止把 Java 編程稱為面向?qū)ο蟮恼Z言,而應(yīng)當(dāng)稱其為面向框架的語言。在許多方面,框架級架構(gòu)代表特定構(gòu)建塊所描述的物理架構(gòu)。
應(yīng)用程序架構(gòu)的另一個(gè)有趣的方面描述應(yīng)用程序的邏輯部分如何整合在一起。這屬于設(shè)計(jì)模式和其他結(jié)構(gòu)描述的領(lǐng)域,并且因而趨向于更具抽象性和邏輯性,而非物理性。例如,您可以說 Web 應(yīng)用程序遵循模型-視圖-表示器(Model-View-Presenter)模式,而無需詳細(xì)說明您使用哪個(gè)框架實(shí)現(xiàn)邏輯安排。這種邏輯安排是在開始處理應(yīng)用程序的新組件時(shí),最有可能增添到工作空間白板(whiteboard)中的內(nèi)容之一。
企業(yè)架構(gòu)(企業(yè)級架構(gòu))
企業(yè)級的架構(gòu)是指,考慮到以上的功能所開發(fā)的架構(gòu),如程序在物理上、邏輯上的分布式、跨平臺、多系統(tǒng)的數(shù)據(jù)集成功能、多系統(tǒng)的整合功能、和一定的可擴(kuò)展性和可維護(hù)性等。
企業(yè)架構(gòu)關(guān)注如何使企業(yè)作為一個(gè)整體(通常意味著在大型組織內(nèi)運(yùn)行的應(yīng)用程序)來使用應(yīng)用程序。關(guān)于企業(yè)架構(gòu)與應(yīng)用程序架構(gòu)之間關(guān)系的常見比喻是把企業(yè)比作城市規(guī)劃,把應(yīng)用程序比作建筑結(jié)構(gòu)。城市規(guī)劃者必須考慮獲得水、電、污水和其他服務(wù)才能使城市運(yùn)轉(zhuǎn)。一棟大樓使用的自來水不能多于提供給它的配額。企業(yè)架構(gòu)需要為應(yīng)用程序考慮同樣的事情:您不可以允許一個(gè)應(yīng)用程序使用所有網(wǎng)絡(luò)帶寬,而如果基礎(chǔ)設(shè)施服務(wù)崩潰,就會出現(xiàn)大量問題。
企業(yè)架構(gòu)在過去幾年里得到了很多關(guān)注,這都是因?yàn)槊嫦蚍?wù)架構(gòu)(Service-Oriented Architecture,SOA)。SOA 是一個(gè)獨(dú)立的龐大主題,因此本系列未來幾期文章將把它處理為特殊案例。它擁有自己的有趣方面,因?yàn)樗谝?guī)定應(yīng)用程序構(gòu)造的特性時(shí),它模糊了企業(yè)架構(gòu)與應(yīng)用程序架構(gòu)之間的界限。
企業(yè)級應(yīng)用
企業(yè)級應(yīng)用是指那些為商業(yè)組織、大型企業(yè)而創(chuàng)建并部署的解決方案及應(yīng)用。這些大型企業(yè)級應(yīng)用的結(jié)構(gòu)復(fù)雜,涉及的外部資源眾多、事務(wù)密集、數(shù)據(jù)量大、用戶數(shù)多,有較強(qiáng)的安全性考慮。
當(dāng)代的企業(yè)級應(yīng)用決不可能是一個(gè)個(gè)相互獨(dú)立的系統(tǒng)。在企業(yè)中,一般都會部署多個(gè)彼此連接的、相互通過不同集成層次進(jìn)行交互的企業(yè)級應(yīng)用,同時(shí)這些應(yīng)用又都有可能與其它企業(yè)的相關(guān)應(yīng)用連接,從而構(gòu)成一個(gè)結(jié)構(gòu)復(fù)雜的、跨越Intranet和Internet的分布式企業(yè)應(yīng)用群集。
此外,作為企業(yè)級應(yīng)用,其不但要有強(qiáng)大的功能,還要能夠滿足未來業(yè)務(wù)需求的變化,易于升級和維護(hù)。
過度設(shè)計(jì)的陷阱
設(shè)計(jì)人員往往喜歡套用設(shè)計(jì)模式、多層架構(gòu)來進(jìn)行架構(gòu)的設(shè)計(jì),其通病往往是過度設(shè)計(jì)。過度設(shè)計(jì)的解決方案不能說不好,其動機(jī)也十分明顯:如果我們構(gòu)建許多擴(kuò)展層,我們稍后可以在其上更輕松地構(gòu)建更多層。但是,這是一個(gè)危險(xiǎn)的陷阱。因?yàn)橐话阈詫⒃黾屿兀◤?fù)雜度),所以您將破壞在項(xiàng)目初期中通過有趣的方式演化設(shè)計(jì)的能力。增加過多靈活性將使對代碼庫的每一次更改都變得更加復(fù)雜。
此外,過多時(shí)使用配置文件和配置項(xiàng)也使得系統(tǒng)使用、維護(hù)和設(shè)計(jì)都異常復(fù)雜,代碼可讀性和維護(hù)性下降。除了開發(fā)人員自己,沒有人能簡單的維護(hù)和升級這個(gè)系統(tǒng),這樣的設(shè)計(jì)不能不說糟糕。
當(dāng)然,您不可以忽略可擴(kuò)展性。敏捷的移動性在決定如何實(shí)現(xiàn)功能時(shí)很重要:YAGNI(You Ain't Gonna Need It)。這是避免過度設(shè)計(jì)簡單功能的信條。只實(shí)現(xiàn)目前需要的功能,在以后您需要更多功能時(shí),可以再進(jìn)行添加。我看到過某些 Java 項(xiàng)目為了實(shí)現(xiàn)一般性和可擴(kuò)展性,在架構(gòu)與設(shè)計(jì)方面使用了大量折衷,最后導(dǎo)致項(xiàng)目失敗。這是個(gè)令人感到諷刺的教訓(xùn),因?yàn)楸緛硐MM可能延長項(xiàng)目的生命周期,結(jié)果反而縮短了生命周期。了解如何把握可擴(kuò)展性與過度設(shè)計(jì)之間的微妙界限十分困難。
設(shè)計(jì)的折衷
您可能由于外部壓力(例如日程壓力、資金壓力)在設(shè)計(jì)中有所折衷,但糟糕的是架構(gòu)設(shè)計(jì)往往具有不可逆性,也就是說,一旦今天你決定了系統(tǒng)的架構(gòu),就像你鋪好了建筑物的龍骨一樣,不可能簡單的逆轉(zhuǎn)了。能改的只是建筑物的外表和裝飾了,就像代碼級別的重構(gòu)一樣。架構(gòu)重構(gòu)?資金和風(fēng)險(xiǎn),決定了其不可逆。
我的一個(gè)同事為一家具有工會組織的公司做過一個(gè)工資系統(tǒng)。該工會為其某些成員爭取的一項(xiàng)福利是在狩獵季節(jié)開始時(shí)有一天額外的休假(嘿,他們一定是有優(yōu)秀的談判代表)。涉及的員工只在一家工廠工作,但是提供額外的休假是整個(gè)公司的工資系統(tǒng)的合法部分。這項(xiàng)更改給軟件增添了許多復(fù)雜度,而這種業(yè)務(wù)需求又必須滿足,如何能不破壞我們的設(shè)計(jì)而滿足這種特殊需求呢?您可能由于外部壓力(例如日程壓力、資金壓力)在設(shè)計(jì)時(shí)給它開了一個(gè)口子,這種折衷很明顯會破壞良好的架構(gòu)。但這種復(fù)雜性確實(shí)存在。
另一個(gè)示例:輸入表單的字段級安全性。許多業(yè)務(wù)人員都認(rèn)為他們需要對每個(gè)字段的安全特性進(jìn)行精細(xì)控制。實(shí)際上,一旦實(shí)現(xiàn)這樣的精細(xì)控制,他們幾乎總是很討厭它,因?yàn)檫@將給需要定義和維護(hù)所有元數(shù)據(jù)的用戶帶來負(fù)擔(dān)。我們的一個(gè)項(xiàng)目中的業(yè)務(wù)人員真的非常需要此功能,因此我們?yōu)樗麄冊谄渲幸粋€(gè)屏幕中實(shí)現(xiàn)了部分此功能。在他們粗略意識到使用此功能所需的工作后,他們決定,由于訪問應(yīng)用程序的惟一方法是通過一間上了鎖的辦公室,因此他們可以采用更粗粒度的安全性。這是一個(gè)在業(yè)務(wù)人員認(rèn)識到他們認(rèn)為必需的功能之后做出設(shè)計(jì)決定的優(yōu)秀示例。設(shè)計(jì)師的難處就在于此。
免責(zé)聲明:本網(wǎng)站(http://www.www.gypb.net/)內(nèi)容主要來自原創(chuàng)、合作媒體供稿和第三方投稿,凡在本網(wǎng)站出現(xiàn)的信息,均僅供參考。本網(wǎng)站將盡力確保所提供信息的準(zhǔn)確性及可靠性,但不保證有關(guān)資料的準(zhǔn)確性及可靠性,讀者在使用前請進(jìn)一步核實(shí),并對任何自主決定的行為負(fù)責(zé)。本網(wǎng)站對有關(guān)資料所引致的錯(cuò)誤、不確或遺漏,概不負(fù)任何法律責(zé)任。
本網(wǎng)站刊載的所有內(nèi)容(包括但不僅限文字、圖片、LOGO、音頻、視頻、軟件、程序等)版權(quán)歸原作者所有。任何單位或個(gè)人認(rèn)為本網(wǎng)站中的內(nèi)容可能涉嫌侵犯其知識產(chǎn)權(quán)或存在不實(shí)內(nèi)容時(shí),請及時(shí)通知本站,予以刪除。
