乙個成功的架構,就是乙個可以解決使用者需求(包括功能和非功能)的架構。當然,還要考慮到可行性與擴充套件性。其中,擴充套件性又是最容易出問題及最困難的地方。要做到容易擴充套件,你就要知道,或者**到將來使用者需求的變更方向。如果架構師只著重技術的話,要做到這點真的是非常困難。所以從企業架構師的角度來看,他不但要對企業的業務非常了解,也必須要了解未來幾年業務發展的方向。soa的流行事實上就給了我們乙個機會去想清楚it跟業務部門的關係,it到底只是乙個一味追趕業務需求的部門,還是乙個業務上的拍檔,彼此互相影響,這將影響到整個企業資訊架構的成功。
要進行軟體架構設計並不特別需要什麼工具,最重要倒是溝通。溝通是為了兩個原因。第乙個是對需求的理解,第二個是把你的設計作推廣,缺一不可。
第一點比較容易理解,正如前面說過,不清楚需求是不可能設計出成功的架構。第二點則比較容易忽略。老實說,乙個企業架構的成功與否就是要看到底這個架構能否落地,個別部門的專案組是否跟從。所以作為架構師,一定要多聽,多溝通。
在架構的規劃及設計階段,我發現最有用的工具是工作坊,就是為了乙個特定的目的而把不同部門的人聚集起來一同討論,讓每個受影響的部門都可以充分發表意見。架構師作為facilitator,必需要有良好的溝通技巧,敏銳的觸覺,以及包容和正面的態度。國內跟國外的架構設計不存在很大的技術差異,只是國內搞技術的人都太注重技術,一般忽略了對業務的關注,對治理及溝通的重視。
現實生活中的軟體系統實實在在可以用複雜大系統來形容,從規劃、開發、維護和變更涉及到許許多多的人和事。架構設計就是要在規劃階段都把後面的事情盡量把握進來,要為穩定性努力,還要為可維護性、擴擴充套件性以及諸多的效能指標而思前想後。除了技術上的考慮,還要考慮人的因素,包括人員的組織、軟體過程的組織、團隊的協作和溝通等。
架構師首先必須具有豐富的開發經驗,是個技術主管。因為他必須清楚什麼是可以實現的,實現的方式有哪些,相應的難度怎麼樣,實現出來的系統面對需求變化的適應性等一系列指標。另外,需要對面向過程、物件導向、面向服務等設計理念有深刻的理解,可以快速的察覺出實現中的問題並提出相應的改進(重構)方案(也就是通常說的反模式)。這些都需要長期的開發實踐才能真正的體會到,單從書本上很難領會到,就算當時理解了也不一定能融會到實踐中去。
在技術能力上,軟體架構師最重要也是最需要掌握的知識是構件通訊機制方面的知識,包括程序內通訊(物件訪問、函式呼叫、資料交換、執行緒同步等)以及程序外(包括跨計算機)的通訊(如rmi、dcom、web service)。在web應用大行其道的今天,開發者往往對伺服器間的通訊關注的比較多,而對程序內的通訊較少關注。程序外跨機器通訊是構建分布式應用的基石,它是架構設計中的鳥瞰檢視;而程序內的通訊是模組實現的骨架,它是基石的基石。如果具體到乙個基於.net企業級架構設計,首先需要的是語言級別的認識,包括.net的clr、繼承特性、委託和事件處理等。然後是常用解決方案的認識,包括asp.net web service、.net remoting、企業服務元件等。總之,豐富的開發實踐經驗有助於避免架構師紙上談兵式的高來高去,給**編寫人員帶來實實在在的可行性。
具有足夠的行業業務知識和商業頭腦也是很重要的。行業業務知識的足夠把握可以給架構師更多的擁抱變化的能力,可以在系統設計的時候留出一些擴充套件的餘地來適應可能來臨的需求變化。
架構設計師對人的關注必須提公升到架構設計之初來納入考慮的範圍,包括溝通以及對人員素質的判斷。
架構師應時刻注意新軟體設計和開發方面的發展情況,並不斷探索更有效的新方法、開發語言、設計模式和開發平台不斷很快地公升級,軟體架構師需要吸收這些新技術新知識,並將它們用於軟體系統開發工作中。
軟體架構師的重要作用
軟體架構師在整個軟體開發過程中都起著重要的作用,並隨著開發程序的推進而其職責或關注點不斷地變化,在需求階段,軟體架構師主要負責理解和管理非功能性系統需求,比如軟體的可維護性、效能、復用性、可靠性、有效性和可測試性等等,此外,架構師還要經常審查和客戶及市場人員所提出的需求,確認開發團隊所提出的設計;在需求越來越明確後,架構師的關注點開始轉移到組織開發團隊成員和開發過程定義上;在軟體設計階段,架構師負責對整個軟體體系結構、關鍵構件、介面和開發政策的設計;在編碼階段,架構師則成為詳細設計者和**編寫者的顧問,並且經常性地要舉行一些技術研討會、技術培訓班等;隨著軟體開始測試、整合和交付,整合和測試支援將成為軟體架構師的工作重點;在軟體維護開始時,軟體架構師就開始為下一版本的產品是否應該增加新的功能模組進行決策。
如何成為優秀的軟體架構師
顯而易見,在軟體開發過程中,乙個優秀軟體架構師的重要性是不應低估的。那麼如何成為優秀的軟體架構師呢?
首先必須具有豐富的軟體設計與開發經驗,這有助於理解並解釋所進行的設計是如何對映到實現中去。
其次要具有領導能力與團隊協作技能,軟體架構師必須是乙個得到承認的技術領導,能在關鍵時候對技術的選擇作出及時、有效的決定。
第三是具有很強的溝通能力,呵呵,其時這一點好象什麼鬼角色都最好具備,軟體架構師需要與各路人馬經常打交道,客戶、市場人員、開發人員、測試人員、專案經理、網路管理員、資料庫工程師等等,而且在很多角色之間還要起溝通者的作用。在技術能力方面,軟體架構師最重要也是最需求掌握的知識是構件通訊機制方面的知識,比如遠端過程呼叫、j**armi、corba、com/dcom、各種標準的通訊協議、網路服務、面對物件資料庫、關聯式資料庫等等,另外,架構師應時刻注意新軟體設計和開發方面的發展情況,並不斷探索更有效的新方法。開發語言、設計模式和開發平台不斷很快地公升級,軟體架構師需要吸收這些新技術新知識,並將它們用於軟體系統開發工作中。當然,行業的業務知識對軟體架構師也是很重要的,有助於設計
出乙個滿足客戶需求的體系結構,優秀的軟體架構師常常因為要盡快獲得對行業業務的理解而必須快速學習並且進行敏銳的觀察。
上面的描述是枯燥乏味的,但作為乙個軟體架構師,在整個軟體系統的開發過程中是樂趣無窮的,因為這個角色很具有挑戰性,有時需要左右逢源八面玲瓏,有時又需要果斷堅定不留情面。在國內,較少軟體企業擁有獨立的架構師,通常乙個軟體高手身兼數職,既是專案經理,又是軟體架構師,還是軟體開發者,有時還要客串乙個測試人員,這對軟體的開發周期和產品質量是不利的,有時乙個人的觀點立場是很片面的,而且繁重的工作、沉重的壓力會影響乙個人的情緒,情緒會影響決策,決策影響結果,所以值得我們三思而後行。
構架師自我培養過程
構架師不是通過理論學習可以搞出來的,不過不學習相關知識那肯定是不行的。總結構架師自我培養過程大致如下,僅供參考。
1、構架師胚胎(程式設計師)
學習的知識是語言基礎、設計基礎、通訊基礎等,應該在大學完成,內容包括j**a、c、c++、uml、rup、xml、socket通訊(通訊協議)——學習搭建應用系統所必須的原材料。
2、構架師萌芽(高階程式設計師)
學習分布式系統、組建等內容,可以在大學或第一年工作時間接觸,包括分布式系統原理、ejb、corba、com/com+、webservice(研究生可以研究網路計算機、高效能併發處理等內容)
3、構架師幼苗(設計師)
應該在掌握上述基礎之上,結合實際專案經驗,透徹領會應用設計模式,內容包括設計模式(c++版本、j**a版本)、ejb設計模式、j2ee構架、uddi、軟體設計模式等。在此期間,最好能夠了解軟體工程在實際專案中的應用以及小組開發、團隊管理。
4、軟體構架師的正是成型在於機遇、個人努力和天賦軟體構架師其實是一種職位,但乙個程式設計師在充分掌握軟構架師所需的基本技能後,如何得到這樣的機會、如何利用所掌握的技能進行應用的合理構架、如何不斷的抽象和歸納自己的構架模式、如何深入行業成為能夠勝任分析、構架為一體的精英人才這可不是每個人都能夠遇上的餡餅……
架構師之路 架構師思維的培養
公司的cms 綜合賦碼管理系統 是winform的cs架構。這套系統的架構師換了3屆,到現在已經幾年沒有架構師了。本來入職時,崗位目標就是這個 自動化架構師 後來和領導達成共識先爭取成為儲備架構師,因為架構首先是為業務服務的,而工控行業有許多特別的地方,不是普通的軟體技術堆疊就能做出優秀的工控軟體的...
小白聊架構師 怎麼成為架構師
還有人說 我早就掌握了物件導向設計,也看了 企業應用架構模式 架構之美 大型 技術架構 等等架構的書,為啥還當不了架構師?是啊,這高階,大氣,上檔次的架構師是怎麼煉成的?這裡講乙個小王的故事吧。又到了畢業季,一批應屆生進了乙個軟體公司,小王也在其中。新人進入公司,基本上都是從最底層做起,做那些最髒最...
架構師之路 架構師思維的培養
公司的cms 綜合賦碼管理系統 是winform的cs架構。這套系統的架構師換了3屆,到現在已經幾年沒有架構師了。本來入職時,崗位目標就是這個 自動化架構師 後來和領導達成共識先爭取成為儲備架構師,因為架構首先是為業務服務的,而工控行業有許多特別的地方,不是普通的軟體技術堆疊就能做出優秀的工控軟體的...