❶ 我的win10 自帶的郵件不顯示圖片怎麼辦
1、剛升級時是這個樣子,已經命名的相對方便,但如果同樣的圖片比較多;
❷ 如何做好軟體系統的架構設計
軟體架構設計的目的 對於外包業務類型的項目,軟體架構設計的目的與產品類型的項目有所不同,在這里主要討論外包類型項目的軟體架構設計目的。 1、為大規模開發提供基礎和規范,並提供可重用的資產,軟體系統的大規模開發,必須要有一定的基礎和遵循一定的規范,這既是軟體工程本身的要求,也是客戶的要求。架構設計的過程中可以將一些公共部分抽象提取出來,形成公共類和工具類,以達到重用的目的。 2、一定程度上縮短項目的周期,利用軟體架構提供的框架或重用組件,縮短項目開發的周期。 3、降低開發和維護的成本,大量的重用和抽象,可以提取出一些開發人員不用關心的公共部分,這樣便可以使開發人員僅僅關注於業務邏輯的實現,從而減少了很多工作量,提高了開發效率。 4、提高產品的質量,好的軟體架構設計是產品質量的保證,特別是對於客戶常常提出的非功能性需求的滿足。 軟體架構設計的原則 軟體架構設計必須遵循以下原則: 1、滿足功能性需求和非功能需求。這是一個軟體系統最基本的要求,也是架構設計時應該遵循的最基本的原則。 2、實用性原則,就像每一個軟體系統交付給用戶使用時必須實用,能解決用戶的問題一樣,架構設計也必須實用,否則就會「高來高去」或「過度設計」。 3、滿足復用的要求,最大程度的提高開發人員的工作效率。 軟體架構設計的幾種視圖 我們常常在討論架構設計該做些什麼的時候,或是在架構設計評審的會議上,會提出各種各樣的問題,例如開發人員該如何記錄Log,事務如何控制?怎樣才能提高我們的開發人員的工作效率,即在單位時間內更有品質的完成更多的功能?怎樣滿足客戶的非功能性需求?怎樣讓生產環境的平台管理人員更好的維護系統? 上面這些問題,實際上是軟體系統的不同的干係人站在不同的角度上提出的問題,要回答上面這些問題,我們就得從不同的視角來看待軟體架構設計這項工作。 1、邏輯架構視角,從系統用戶的角度考慮問題,設計出來的軟體架構能夠滿足業務邏輯的需求,能夠處理現在越來越復雜的業務邏輯需求。 2、開發架構視角,從系統開發人員的角度來考慮問題,設計的架構要易於理解,易於開發,易於單元測試,最好做到讓開發人員可以用最少的代碼行數完成功能的開發。 3、運行架構視角,從系統運行時的質量需求考慮問題,特別關注於系統的非功能需求,客戶常常都會要求我們系統的功能畫面的最長響應時間不超過4秒,能滿足2000個用戶同時在線使用,基於角色的系統資源的安全控制等。 4、物理架構視角,關注系統安裝和部署在什麼樣的環境上,例如現在最流行的企業應用服務解決方案IBM Http Server + WebSphere Application Server + DB2,WebLogic + Oracle等。 5、數據架構視角,如今我們開發的各類系統,如MIS,ERP,SAP,基本上都是對各類數據的操作,把一堆不太好懂的數據展現成用戶容易看懂的數據,自動處理各類數據的運算等,所以數據的持久化是十分重要的一件事情。1、分析需求和理解業務模型(或領域建模),並選定關鍵Use case。 軟體的需求,可以分為從用戶視角和開發人員視角來看,從用戶的角度看,又可以分為功能性和非功能性需求,我們必須從不同的視角和級別去全面的認識需求並分析需求,理解業務模型。實踐表明,常常被我們忽視的非功能性需求常常會導致整個項目失敗。 理解業務需求最好的方式莫過於進行領域建模,領域建模與需求分析往往是交替穿叉進行的,領域建模主要有以下三個方面的作用: ◆探索復雜問題,弄清領域知識。Martin Fowler曾經說過,他採用面向對象方法最大的好處就是它有助於解決更為復雜的問題。領域建模本身作為輔助思維的工具,幫助我們將注意力始終保持在最為重要的業務概念及其關繫上,使我們能夠不斷深入地,系統的對需求進行分析和認識。領域建模往往是一個從模糊到清晰,從零散到系統的過程。 ◆決定功能范圍,影響可擴展性。任何模型都是對現實世界某種程序的抽象,這種抽象就會忽略某一些東西,例如忽略對象的屬性和對象間的關系,而這些忽略往往都是帶有一定的目的性的,這種忽略就決定了功能的范圍。模型揭示了各種功能背後的結構,如果說定義功能相當於「拍照片」的話,那麼領域建模就相當於「做透視」,更加關注問題領域的內在結構,相當於對問題領域進行了一定的抽象,良好的領域模型不僅能很好的支持現有的功能,而且還可以在一定程度上支持未來可能出現的新需求,體現良好的可擴展性。 ◆提供交流基礎,促進有效溝通。領域建模通常會使用UML圖作為呈現的方式,這樣為我們的溝通提供了方便。當然,有時候文字在描述某些特定領域的問題時可能更適合,可以靈活運用。 在我們公司的實際軟體開發流程中,往往領域建模缺少這一環節,這可能是在以後的工作中需要進一步提高之處。 雖然我們總是期望架構設計師能全面掌握需求,但由於時間和精力的限制,擺在我們面前的現實就是架構設計師沒有時間對所有需求進行深入分析,所以我們的策略就是「把好鋼用在刀刃上」,即把大部分時間和精力花在對決定架構最重要的關鍵需求上。在選擇關鍵需求時要注意:高優先順序的需求往往是從用戶的角度來看的,可能並不是真正的關鍵需求。在《RUP實踐者指南》一書中向我們講述了如何確定關鍵功能需求?A.作為應用程序的核心或實現了系統的主要介面的功能,B.必須被實現的功能,即如果這些功能不被實現,則開發出來的軟體就失去了價值,C.覆蓋了系統架構的一些方面,但沒有被其他重要的Use case覆蓋到的功能。 2、分別從各個視角來考慮軟體架構的方方面面。 軟體的架構設計必須考慮到各方面,根據前期工作確立的領域模型,關鍵需求,系統約束等進行設計,必須從系統用戶,開發人員,系統管理員,部署管理員,數據管理員等人員的角度去分析並解決問題。比如說,如果我們的運行架構採用Cluster方式時,就必須小心Cache和Session等的使用;如果我們的業務邏輯要求我們要操作多個資料庫時,就要考慮採用支持二階段事務提交的方式。 只有將這些方方面面的問題都考慮到了,這樣的架構設計才是完整的。至於每一個視圖中,我們應該設計到什麼細節這一問題,實際上與整個項目的過程定義有關。例如,如果我們有專門安排資料庫概要設計的活動,那我們在架構設計的過程中就可以只需要關注更高層次的資料庫特性及資料庫之間的關系,而每一張表的數據字典可以在後續的相關活動中進行設計,但如果沒有這樣的活動,那我們就要細化到每一張表的每一個欄位,以及表之間的關系。 3、解決技術面的重點問題和難題 在軟體架構設計的過程中,我們往往會需要攻克一些技術面的重點問題和難題,這完全是一項極其需要扎實的理論知識和豐富的實踐經驗支撐的工作。例如,我們如何提高整個系統的性能?如何能很好的導出極其復雜的「中國式報表」(一般比西方國家產出的報表要復雜很多,而且很多開源的BI類的框架並不能完全解決問題)? 當遇到確實是很困難的問題,可以去網路一下或Google一下,也可以去請教公司的資深技術人員或專家,或者召開小范圍的技術專題討論會議,採用腦力激盪的方法試著找找答案,這樣才能提高工作的效率。 4、召開架構設計評審會議進行同行評審。 架構設計評審是極其重要的一環,我曾將其形容為「七種武器」中的離別鉤,就是因為在會議上,同行們可能會提很多問題或意見,而且很多意見很尖銳,所以一定要虛心接受,並做好記錄,正所謂「良葯苦口利於病,忠言逆耳利於行」。 在評審會議之前,我們要完成很多准備工作,最好是能准備一份簡明扼要的電子簡報,把最重要的問題列出來,這樣在進行評審會議時,就不會漫無目的,在會議前就將這些資料發給與會人員,請他們抽空先了解一下,在會議進行時,要學會控制會議的進度,提高會議的效率。 5、針對關鍵Use case在設計的架構上實現功能來驗證架構。 對於架構設計的驗證也是一項十分重要的工作,其驗證技術有很多種,在我們公司通常會採用Sample的形式,即XP中所說的迭代0,RUP中所說的切片。這樣做的好處是既可以從實際的產品角度出發來有效的驗證架構是否滿足要求,又可以比拋棄型原型驗證技術節省成本。 這個Sample絕不是我們在解決架構設計中的問題時拿來做實驗的一些代碼的拼湊,而是完整的實現某一關鍵Use case的符合架構設計和一系列規范的可交付的代碼及相關文檔。同時,這個Sample可以作為你在給大家講解或培訓架構時的教材,也可以作為開發人員使用此架構進行開發的藍本,甚至是只需要復制粘貼,加上簡單的修改即可。 6、交付給客戶Review。 這一環節,在很多公司可能並不存在,因為他們的軟體架構並不一定需要客戶Review,但像我們這種做服務的公司,最重要的就是客尊,落實到軟體架構設計這一活動,就是讓客戶理解並接受你的架構設計方案,同時,客戶也會起到幫你驗證架構的作用。通常,我們的架構得到客戶的認可後,便可進入大規模的開發。 在交付給客戶Review時,通常可能會以會議的形式進行Review,所以我們可以參照評審會議時好的做法來召開會議,在這里就不再冗述。軟體架構設計的常見誤區及解決辦法 1、架構設計的常常會「高來高去」。所謂高來高去,實際上就是我們的架構設計僅停留在模型階段,但也絕不是產生第一支樣常式式。 2、架構設計時常常會在某些方面過度設計(Over engineering)。為了一些根本不會發生的變化而進行一系列復雜的設計,這樣的設計就叫過度設計,往往會帶來資源的浪費並且會增加開發的工作量或難度。雖然我們必須考慮到系統的擴展性,可維護性等,但切忌過度設計。有時候或許你並不能判斷出哪些設計是過度設計,此時你可以請教你的PM,讓他站在整個項目的高度來幫你決策一下。 3、架構(Architecture)不是框架(Framework),也不是簡單的將幾種框架或技術的組合,框架本身也是有架構的。框架一般是針對於某一方面或領域的重用性和可擴展性非常好的半成品,我們可以用一句較為經典的話來總結:框架是軟體,架構不是軟體,框架是一種特殊的軟體。我們在工作中通過將許多方面的可重用的工具類,公共類,基礎類等抽象出來,即可形成一些可重用的框架。 4、架構設計絕不是新技術展示平台,合適的技術才是對於項目有利的技術,必須考慮到開發人員的能力和維護人員的能力。作為一名架構設計師應該更多的考慮如何平衡業務需求,織織運作(主要指團隊中的協作)和技術三者的關系,而不僅僅是去關注那些技術細節。 5、架構設計的成功與否決定著系統品質的好壞,因為架構設計不好而導致交付的系統Bug過多,無法滿足客戶非功能性需求等問題,從而導致項目取消的案例時有發生。架構設計不是架構設計師一個人的事情,也不是幾天就能完成的一項工作,必須是架構設計師付出大量辛勤勞動後的成果,其成敗往往與組織、主管、項目經理的支持有著密切的關系。 關於架構設計的一點通用技巧 1、分層(Layer)規則。這里的層是指邏輯上的層次(Layer),並非指物理上的層次(Tier)。目前的絕大多數的企業級應用系統中都分為三層,即表現層,領域層和數據層。在對各層次進行劃分時,主要可以從以下幾個方面來考慮:A、每一層是一個相對獨立的部分,可以作為一個整體,無需對其它層了解;B、將層次間的依賴性降到最低,即降低耦合;C、可以從某種程度上替換掉某一層,而對其它層不會產生過多的影響;D,層次並不能封閉所有的東西,假如用戶界面上增加了一個欄位,那麼領域層就要增加一個數據域,數據層就要增加一個相應的欄位。同時,過多的分層可能會對性能造成一定的影響。 2、包(package)之間不要產生循環依賴。通常包的劃分會先按不同的邏輯層來劃分,在層的包下面再按功能來劃分。避免包間的循環依賴是一個比較通用的規則,這樣的規則一定有其存在的價值和道理,之所以這樣主要是出於以下原因:A、循環依賴會使分層失去意義;B、循環依賴會帶來許多潛在的風險,如可能會產生嵌套事務(nested transaction,JavaEE標准中並不支持這種事務)的現象,我就曾遇到過這樣的問題,在一個項目中,事務放在業務邏輯層統一控制,但由於開發人員忽視了架構中這樣的原則,在持久層調用了展現層的公用類,形成了迴圈的現象,導致了嵌套事務的發生。 3、設計模式的應用。在很多人的觀念里,提供設計模式就等同於GOF的設計模式,其實設計模式是個廣泛的概念,比如需求模式、領域模式、反模式等都屬於設計模式。模式其實是一門工具,是人們對於過去解決某一類問題的經驗總結,所以我們可以在設計活動中應用各種設計模式,但是在應用這些模式之前一定要先分析清楚問題,否則就可能出現「牛頭不對馬嘴」的現象。 成功的項目總有相似之處,失敗的項目卻各有各的失敗之處。好的軟體架構設計必定是成功項目的相似之處,我們有什麼理由不把軟體架構設計做好了?
❸ 【求高手】照片恢復的方式!
索尼稿明U盤上傳照片和一個1G的QQ飛車安裝文件(都是剪切復制的,蘆鉛並且已清空電腦鍵嘩告用這個軟體去你的舊電腦上恢復吧,easyrecovery 祝你成功! 或者 使用
❹ 陝西二建照片維護什麼意思
照片維護:是指為了清除系統運行中發生的故障和錯誤,軟、硬體維護人員要對系統進行必要的修改與完善,為了使系統適應用戶環境的變化,滿足新提出物游族的需要,也要對原系統做些局部的更新,系統維護的任務是改正軟體系統在使用過程中發現的隱含錯誤,擴充在使用過程中用戶提出的新的功能及性能罩弊要求,其目的磨基是維護軟體系統的"正常運作"。
❺ 微信轉賬系統維護是怎麼顯示的相片
微信轉賬系統蠢悄維護時,通常會顯示一個提示頁面,上面會有文字說明正在進行系統維護,同時會有一個相關的圖標或圖片。具體顯示的相片可能因不同的維護內容而有所不同,但一般情棗配況下會是與微信品牌相關的標志或者類似工具箱、維修工具等與維護相關的圖標。維護過程中可能還有其他提示信息,例如預計維護時間、維護內容等。在維護期間,您可能無法正帶岩渣常使用微信轉賬功能,建議您耐心等待維護完成後再使用。
❻ 全國教師管理信息系統照片採集 一直顯示系統繁忙怎麼辦
有可能是你的網路卡頓,或者是伺服器繁忙,可以刷新試一下
一般電腦顯示「系統繁忙」是:有可能是因為系統有垃圾了,建議及時清理系統中的垃圾。可以下載清理系統的軟體如360這樣的一些電腦衛士。
有可能電腦中毒,及時清理一些非軟體商店下載的軟體。
有可能是本身軟體問題,版本比較舊了。建議定時更新軟體。
有可能是系統後台正在維護。
系統頌余或瀏覽器暫時性故障、維修、異常、缺陷等影悄拆響引起不正常。
有可能是速度、木馬、系統漏洞、野運滾病毒等綜合性影響,可先整理你的電腦。
❼ 請問一下我的QQ相冊裡面照片為什麼載入不出來了
以QQ9.3.8(27301)為例,qq相冊里的照片顯示不出來的原因:
1、QQ空間有很多FLASH和圖改大片,如果網速很慢的話,QQ空間橘殲改相冊基本上是打不開的,建議避開高峰期圓判,關閉一些不必要的頁面,提高網速。2、QQ空間伺服器在臨時維護,只能過一會再打開看看。
❽ 5s突然白蘋果,裡面有照片,怎麼才能導出來,求大神
修復白蘋果需要以下步驟:
首先將手機與數據線連接電腦。
通過91助手修復軟體點擊系統維護,直接看到的是白蘋果修復,點擊進行修復。
手機出現白蘋果現凱襪象主要是因為以下幾個原因:
第一、手機仿孫扮安裝了備灶與系統出現沖突的軟體;
第二、用戶刪除了手機系統不兼容的軟體;
第三、桌面軟體出現了問題。
❾ vivoxshot系統升級後會不會軟體照片都沒有了
所有文件都會儲存起來,不會刪掉。
請採納
❿ 什麼是軟體架構有沒有具體解釋
軟體架構
軟體架構(software architecture)是一系列相關的抽象模式,用於指導大型軟體系統各個方面的設計。 軟體架構是一個系統的草圖。軟體架構描述的對象是直接構成系統的抽象組件。各個組件之間的連接則明確和相對細致地描述組件之間的通訊。在實現階段,這些抽象組件被細化為實際的組件,比如具體某個類或者對象。在面向對象領域中,組件之間的連接通常用介面_(計算機科學)來實現。
軟體體系結構是構建計算機軟體實踐的基礎。與建築師設定建築項目的設計原則和目標,作為繪圖員畫圖的基礎一樣,一個軟體架構師或者系統架構師陳述軟體構架以作為滿足不同客戶需求的實際系統設計方案的基礎。
軟體構架是一個容易理解的概念,多數工程師(尤其是經驗不多的工程師)會從直覺上來認識它,但要給出精確的定義很困難。特別是,很難明確地區分設計和構架:構架屬於設計的一方面,它集中於某些具體的特徵。
在「軟體構架簡介」中,David GArlan 和 Mary Shaw 認為軟體構架是有關如下問題的設計層次:「在計算的演算法和數據結構之外,設計並確定系統整體結構成為了新的問題。結構問題包括總體組織結構和全局控制結構;通信、同步和數據訪問的協議;設計元素的功能分配;物理分布;設計元素的組成;定標與性能;備選設計的選擇。」[GS93]
但構架不僅是結構;IEEE Working Group on Architecture 把其定義為「系統在其環境中的最高層概念」[IEEE98]。構架還包括「符合」系統完整性、經濟約束條件、審美需求和樣式。它並不僅注重對內部的考慮,而且還在系統的用戶環境和開發環境中對系統進行整體考慮,即同時注重對外部的考慮。
在 Rational Unified ProcESs 中,軟體系統的構架(在某一給定點)是指系統重要構件的組織或結構,這些重要構件通過介面與不斷減小的構件與介面所組成的構件進行交互。
從和目的、主題、材料和結構的聯繫上來說,軟體架構可以和建築物的架構相比擬。一個軟體架構師需要有廣泛的軟體理論知識和相應的經驗來事實和管理軟體產品的高級設計。軟體架構師定義和設計軟體的模塊化,模塊之間的交互,用戶界面風格,對外介面方法,創新的設計特性,以及高層事物的對象操作、邏輯和流程。
是一般而言,軟體系統的架構(ArchitECture)有兩個要素:
·它是一個軟體系統從整體到部分的最高層次的劃分。
一個系統通常是由元件組成的,而這些元件如何形成、相互之間如何發生作用,則是關於這個系統本身結構的重要信息。
詳細地說,就是要包括架構元件(Architecture Component)、聯結器(Connector)、任務流(TASk-flow)。所謂架構元素,也就是組成系統的核心"磚瓦",而聯結器則描述這些元件之間通訊的路徑、通訊的機制、通訊的預期結果,任務流則描述系統如何使用這些元件和聯結器完成某一項需求。
·建造一個系統所作出的最高層次的、以後難以更改的,商業的和技術的決定。
在建造一個系統之前會有很多的重要決定需要事先作出,而一旦系統開始進行詳細設計甚至建造,這些決定就很難更改甚至無法更改。顯然,這樣的決定必定是有關系統設計成敗的最重要決定,必須經過非常慎重的研究和考察。
歷史
早在1960年代,諸如E·W·戴克斯特拉就已經涉及軟體架構這個概念了。自1990年代以來,部分由於在 Rational Software Corporation 和MiCROSoft內部的相關活動,軟體架構這個概念開始越來越流行起來。
卡內基梅隆大學和加州大學埃爾文分校在這個領域作了很多研究。卡內基·梅隆大學的Mary Shaw和David Garlan於1996年寫了一本叫做 Software Architecture perspective on an emerging DIscipline的書,提出了軟體架構中的很多概念,例如軟體組件、連接器、風格等等。 加州大學埃爾文分校的軟體研究院所做的工作則主要集中於架構風格、架構描述語言以及動態架構。
計算機軟體的歷史開始於五十年代,歷史非常短暫,而相比之下建築工程則從石器時代就開始了,人類在幾千年的建築設計實踐中積累了大量的經驗和教訓。建築設計基本上包含兩點,一是建築風格,二是建築模式。獨特的建築風格和恰當選擇的建築模式,可以使一個獨一無二。
下面的照片顯示了中美洲古代瑪雅建築,Chichen-Itza大金字塔,九個巨大的石級堆壘而上,九十一級台階(象徵著四季的天數)奪路而出,塔頂的神殿聳入雲天。所有的數字都如日歷般嚴謹,風格雄渾。難以想像這是石器時代的建築物。
圖1、位於墨西哥Chichen-Itza(在瑪雅語中chi意為嘴chen意為井)的古瑪雅建築。(攝影:作者)
軟體與人類的關系是架構師必須面對的核心問題,也是自從軟體進入歷史舞台之後就出現的問題。與此類似地,自從有了建築以來,建築與人類的關系就一直是建築設計師必須面對的核心問題。英國首相丘吉爾說,我們構造建築物,然後建築物構造我們(We shape our buildings, and afterwaRDS our buildings shape us)。英國下議院的會議廳較狹窄,無法使所有的下議院議員面向同一個方向入座,而必須分成兩側入座。丘吉爾認為,議員們入座的時候自然會選擇與自己政見相同的人同時入座,而這就是英國政黨制的起源。Party這個詞的原意就是"方"、"面"。政黨起源的關鍵就是建築物對人的影響。
在軟體設計界曾經有很多人認為功能是最為重要的,形式必須服從功能。與此類似地,在建築學界,現代主義建築流派的開創人之一Louis Sullivan也認為形式應當服從於功能(FORMs follows function)。
幾乎所有的軟體設計理念都可以在浩如煙海的建築學歷史中找到更為遙遠的歷史回響。最為著名的,當然就是模式理論和XP理論。
架構的目標是什麼
正如同軟體本身有其要達到的目標一樣,架構設計要達到的目標是什麼呢?一般而言,軟體架構設計要達到如下的目標:
·可靠性(Reliable)。軟體系統對於用戶的商業經營和管理來說極為重要,因此軟體系統必須非常可靠。
·安全行(Secure)。軟體系統所承擔的交易的商業價值極高,系統的安全性非常重要。
·可擴展性(SCAlable)。軟體必須能夠在用戶的使用率、用戶的數目增加很快的情況下,保持合理的性能。只有這樣,才能適應用戶的市場擴展得可能性。
·可定製化(CuSTomizable)。同樣的一套軟體,可以根據客戶群的不同和市場需求的變化進行調整。
·可擴展性(Extensible)。在新技術出現的時候,一個軟體系統應當允許導入新技術,從而對現有系統進行功能和性能的擴展
·可維護性(MAIntainable)。軟體系統的維護包括兩方面,一是排除現有的錯誤,二是將新的軟體需求反映到現有系統中去。一個易於維護的系統可以有效地降低技術支持的花費
·客戶體驗(Customer Experience)。軟體系統必須易於使用。
·市場時機(Time to Market)。軟體用戶要面臨同業競爭,軟體提供商也要面臨同業競爭。以最快的速度爭奪市場先機非常重要。
架構的種類
根據我們關注的角度不同,可以將架構分成三種:
·邏輯架構、軟體系統中元件之間的關系,比如用戶界面,資料庫,外部系統介面,商業邏輯元件,等等。
比如下面就是筆者親身經歷過的一個軟體系統的邏輯架構圖
圖2、一個邏輯架構的例子
從上面這張圖中可以看出,此系統被劃分成三個邏輯層次,即表象層次,商業層次和數據持久層次。每一個層次都含有多個邏輯元件。比如WEB伺服器層次中有HTML服務元件、Session服務元件、安全服務元件、系統管理元件等。
·物理架構、軟體元件是怎樣放到硬體上的。
比如下面這張物理架構圖描述了一個分布於北京和上海的分布式系統的物理架構,圖中所有的元件都是物理設備,包括網路分流器、代理伺服器、WEB伺服器、應用伺服器、報表伺服器、整合伺服器、存儲伺服器、主機等等。
圖3、一個物理架構的例子
·系統架構、系統的非功能性特徵,如可擴展性、可靠性、強壯性、靈活性、性能等。
系統架構的設計要求架構師具備軟體和硬體的功能和性能的過硬知識,這一工作無疑是架構設計工作中最為困難的工作。
此外,從每一個角度上看,都可以看到架構的兩要素:元件劃分和設計決定。
首先,一個軟體系統中的元件首先是邏輯元件。這些邏輯元件如何放到硬體上,以及這些元件如何為整個系統的可擴展性、可靠性、強壯性、靈活性、性能等做出貢獻,是非常重要的信息。
其次,進行軟體設計需要做出的決定中,必然會包括邏輯結構、物理結構,以及它們如何影響到系統的所有非功能性特徵。這些決定中會有很多是一旦作出,就很難更改的。
根據作者的經驗,一個基於資料庫的系統架構,有多少個數據表,就會有多少頁的架構設計文檔。比如一個中等的資料庫應用系統通常含有一百個左右的數據表,這樣的一個系統設計通常需要有一百頁左右的架構設計文檔。
構架描述
為了討論和分析軟體構架,必須首先定義構架表示方式,即描述構架重要方面的方式。在 Rational Unified Process 中,軟體構架文檔記錄有這種描述。
構架視圖
我們決定以多種構架視圖來表示軟體構架。每種構架視圖針對於開發流程中的涉眾(例如最終用戶、設計人員、管理人員、系統工程師、維護人員等)所關注的特定方面。
構架視圖顯示了軟體構架如何分解為構件,以及構件如何由連接器連接來產生有用的形式 [PW92],由此記錄主要的結構設計決策。這些設計決策必須基於需求以及功能、補充和其他方面的約束。而這些決策又會在較低層次上為需求和將來的設計決策施加進一步的約束。
典型的構架視圖集
構架由許多不同的構架視圖來表示,這些視圖本質上是以圖形方式來摘要說明「在構架方面具有重要意義」的模型元素。在 Rational Unified Process 中,您將從一個典型的視圖集開始,該視圖集稱為「4+1 視圖模型」[KRU95]。它包括:
用例視圖:包括用例和場景,這些用例和場景包括在構架方面具有重要意義的行為、類或技術風險。它是用例模型的子集。
邏輯視圖:包括最重要的設計類、從這些設計類到包和子系統的組織形式,以及從這些包和子系統到層的組織形式。它還包括一些用例實現。它是設計模型的子集。
實施視圖:包括實施模型及其從模塊到包和層的組織形式的概覽。 同時還描述了將邏輯視圖中的包和類向實施視圖中的包和模塊分配的情況。它是實施模型的子集。
進程視圖:包括所涉及任務(進程和線程)的描述,它們的交互和配置,以及將設計對象和類向任務的分配情況。只有在系統具有很高程度的並行時,才需要該視圖。在 Rational Unified Process 中,它是設計模型的子集。
配置視圖:包括對最典型的平台配置的各種物理節點的描述以及將任務(來自進程視圖)向物理節點分配的情況。只有在分布式系統中才需要該視圖。它是部署模型的一個子集。
構架視圖記錄在軟體構架文檔中。您可以構建其他視圖來表達需要特別關注的不同方面:用戶界面視圖、安全視圖、數據視圖等等。對於簡單系統,可以省略 4+1 視圖模型中的一些視圖。
構架重點
雖然以上視圖可以表示系統的整體設計,但構架只同以下幾個具體方面相關:
模型的結構,即組織模式,例如分層。
基本元素,即關鍵用例、主類、常用機制等,它們與模型中的各元素相對。
幾個關鍵場景,它們表示了整個系統的主要控制流程。
記錄模塊度、可選特徵、產品線狀況的服務。
構架視圖在本質上是整體設計的抽象或簡化,它們通過舍棄具體細節來突出重要的特徵。在考慮以下方面時,這些特徵非常重要:
系統演進,即進入下一個開發周期。
在產品線環境下復用構架或構架的一部分。
評估補充質量,例如性能、可用性、可移植性和安全性。
向團隊或分包商分配開發工作。
決定是否包括市售構件。
插入范圍更廣的系統。
構架模式
構架模式是解決復發構架問題的現成形式。構架框架或構架基礎設施(中間件)是可以在其上構建某種構架的構件集。許多主要的構架困難應在框架或基礎設施中進行解決,而且通常針對於特定的領域:命令和控制、MIS、控制系統等等。
構架模式示例
[BUS96] 根據構架模式最適用的系統的特徵將其分類,其中一個類別處理更普遍的結構問題。下表顯示了 [BUS96] 中所提供的類別和這些類別所包含的模式。
類別 模式
結構 層
管道和過濾器
黑板
分布式系統 代理
交互系統 模型-視圖-控制器
表示-抽象-控制
自適應系統 反射
微核
軟體構架是一個容易理解的概念,多數工程師(尤其是經驗不多的工程師)會從直覺上來認識它,但要給出精確的定義很困難。特別是,很難明確地區分設計和構架:構架屬於設計的一方面,它集中於某些具體的特徵。
在「軟體構架簡介」中,David Garlan 和 Mary Shaw 認為軟體構架是有關如下問題的設計層次:「在計算的演算法和數據結構之外,設計並確定系統整體結構成為了新的問題。結構問題包括總體組織結構和全局控制結構;通信、同步和數據訪問的協議;設計元素的功能分配;物理分布;設計元素的組成;定標與性能;備選設計的選擇。」[GS93]
但構架不僅是結構;IEEE Working Group on Architecture 把其定義為「系統在其環境中的最高層概念」[IEEE98]。構架還包括「符合」系統完整性、經濟約束條件、審美需求和樣式。它並不僅注重對內部的考慮,而且還在系統的用戶環境和開發環境中對系統進行整體考慮,即同時注重對外部的考慮。
在 Rational Unified Process 中,軟體系統的構架(在某一給定點)是指系統重要構件的組織或結構,這些重要構件通過介面與不斷減小的構件與介面所組成的構件進行交互。
為闡明其含義,下面將詳述其中的兩個;完整說明請參見 [BUS96]。模式以下列廣泛使用的形式來表示:
模式名
環境
問題
影響,描述應考慮的不同問題方面
解決方案
基本原理
結果環境
示例
模式名
層
環境
需要進行結構分解的大系統。
問題
必須處理不同抽象層次的問題的系統。例如:硬體控制問題、常見服務問題和針對於不同領域的問題。最好不要編寫垂直構件來處理所有抽象層次的問題。否則要在不同的構件中多次處理相同的問題(可能會不一致)。
影響
系統的某些部分應當是可替換的
構件中的變化不應波動
相似的責任應歸為一組
構件大小 -- 復雜構件可能要進行分解
解決辦法
將系統分成構件組,並使構件組形成層疊結構。使上層只使用下層(決不使用上層)提供的服務。盡量不使用非緊鄰下層提供的服務(不跳層使用服務,除非中間層只添加通過構件)。
示例:
1. 通用層
嚴格的分層構架規定設計元素(類、構件、包、子系統)只能使用下層提供的服務, 服務可以包括事件處理、錯誤處理、資料庫訪問等等。 相對於記錄在底層的原始操作系統級調用,它包括更明顯的機制。
2. 業務系統層
上圖顯示了另一個分層示例,其中有垂直特定應用層、水平層和基礎設施層。注意:此處的目標是採用非常短的業務「煙囪」並實現各種應用程序間的通用性。 否則,就可能有多個人解決同一問題,從而導致潛在的分歧。
有關該模式的深入討論,請參見指南:分層。
模式名
黑板
環境
沒有解決問題的確定方法(演算法)或方法不可行的領域。例如 AI 系統、語音識別和監視系統。
問題
多個問題解決顧問(知識顧問)必須通過協作來解決他們無法單獨解決的問題。各顧問的工作結果必須可以供所有其他顧問訪問,使他們可以評估自己是否可以參與解決方案的查找並發布其工作結果。
影響
知識顧問參與解決問題的順序不是確定的,這可能取決於問題解決策略
不同顧問的輸入(結果或部分解決方案)可能有不同的表示方式
各顧問並不直接知道對方的存在,但可以評估對方發布的工作
解決辦法
多名知識顧問都可訪問一個稱為「黑板」的共享資料庫。黑板提供監測和更新其內容的介面。控制模塊/對象激活遵循某種策略的顧問。激活後,顧問查看黑板,以確定它是否能參與解決問題。如果顧問決定它可以參與,控制對象就可以允許顧問將其部分(或最終)解決方案放置於黑板上。
示例:
以上顯示了使用 UML 建模的結構或靜態視圖。 它將成為參數化協作的一部分,然後會綁定到實參上對模式進行實例化。
構架風格
軟體構架(或僅是構架視圖)可以具有名為構架風格的屬性,該屬性減少了可選的形式,並使構架具有一定程度的一致性。樣式可以通過一組模式或通過選擇特定構件或連接器作為基本構件來定義。對給定系統,某些樣式可作為構架描述的一部分記錄在構架風格指南(Rational Unified Process 中設計指南文檔的一部分)中。樣式在構架的可理解性與完整性方面起著主要的作用。
構架設計圖
構架視圖的圖形描述稱為構架設計圖。對於以上描述的各種視圖,設計圖由以下統一建模語言圖組成 [UML99]:
邏輯視圖:類圖、狀態機和對象圖。
進程視圖:類圖與對象圖(包括任務 - 進程與線程)。
實施視圖:構件圖。
部署視圖:配置圖。
用例視圖:用例圖描述用例、主角和普通設計類;順序圖描述設計對象及其協作關系。
構架設計流程
在 Rational Unified Process 中,構架主要是分析設計工作流程的結果。當項目再次進行此工作流程時,構架將在一次又一次迭代中不斷演化、改進、精煉。由於每次迭代都包括集成和測試,所以在交付產品時,構架就相當強壯了。構架是精化階段各次迭代的重點,構架的基線通常會在此階段結束時確定。
架構師
軟體設計師中有一些技術水平較高、經驗較為豐富的人,他們需要承擔軟體系統的架構設計,也就是需要設計系統的元件如何劃分、元件之間如何發生相互作用,以及系統中邏輯的、物理的、系統的重要決定的作出。
這樣的人就是所謂的架構師(Architect)。在很多公司中,架構師不是一個專門的和正式的職務。通常在一個開發小組中,最有經驗的程序員會負責一些架構方面的工作。在一個部門中,最有經驗的項目經理會負責一些架構方面的工作。
但是,越來越多的公司體認到架構工作的重要性,並且在不同的組織層次上設置專門的架構師位置,由他們負責不同層次上的邏輯架構、物理架構、系統架構的設計、配置、維護等工作。