進銷存系統有幾個資料庫?

我在教授軟體設計課程,尤其是以使用案例圖在說明架構設計時,每一個用套件(Package)所界定範圍的系統,係指軟體應用系統,但卻幾乎不會談及到資料庫。因為,軟體應用系統與資料庫是兩個不同的層次,甚至,把資料庫視為是應用系統的 “私有倉儲(private storage)”,會比較恰當。

不過,這衍生出一個問題,學員不容易分清楚如何 “mapping” 抽象面的架構設計至實體的 IT 系統,尤其是資料庫的問題。所以,我會先帶一個問題問學員:在設計層次的考量中,進銷存系統有幾個資料庫?

這一個問題要能回答得出來,其假設前提的考量必須要瞭解,在整體的架構設計中,設計團隊到底將 “進銷存” 視為是一個,還是三個,甚至多個的子系統?

參考下圖1,這是把 “進銷存” 視為是單一的系統,所以,資料庫只有一個。
好處是什麼? 就是簡單,開發也容易。進銷存相關的資訊處理,都是在同一個資料庫內,並沒有分散的問題,所以當處理銷貨需要查詢庫存資訊時,只要下 SQL 敘述直接連結庫存的 TABLE 即可。

將進銷存視為一個整體系統
圖1、將進銷存視為一個整體系統

參考下圖2,架構設計之初時,就已把 “進銷存” 分為三個子系統(Sub-system),或者也可以稱之為元件(Component),以凸顯子系統之間的溝通,是透過介面(Interface)的呼叫。其實,論子系統的範圍與規模,稱為 “模組(Module)” 更為適合,不過,我個人並不喜歡以 “模組” 二字來稱之,因為,這個術語被業界給濫用了,已淪落為在業務面的術語,卻並沒有在實體的系統間,嚴格遵循透過介面的呼叫。

所以圖2,有三個資料庫。
當銷貨人員處理銷貨需要查詢庫存資訊時,需要透過庫存系統所提供的介面來呼叫,介面的實做可能是 “Web Service”、”Java Bean”、”Session Bean”、”COM+” 等,但絕對不能直接下 SQL 來呼叫位於庫存系統內的資料庫,否則,就違背了圖2的整體架構設計。不遵循整體架構設計的規範,私自偷偷連接,稱之為 “跳線”。

將進銷存分成三個獨立的子系統
圖2、將進銷存分成三個獨立的子系統

上圖2的抽象設計與IT面的實做技術,比較困難,也需要花較多成本,以專案為主(Project-based)的開發,時程短、預算低廉,不容易達成圖2的設計目標。但若重覆性的專案,專注在進銷存這個領域上,有豐富足夠的領域知識(Domain Knowledge),且打算產品化(Product),那麼,圖2的系統架構來得有彈性很多,”進”、”銷”、”存” 三個子系統(元件),均可以隨意抽換,各自更新或改版,而不會影響到另一個子系統,如同 PC 主機板內的硬體元件,可以造成 “PnP(Plug and Play)” 的效果。

請注意,上述問題的提問,會有幾個資料庫,是指抽象的邏輯設計層面,可千萬不要與實體的資料庫混為一談。例如,圖2雖然需要三個資料庫,但若以 Oracle 資料庫系統,DBA 可以將邏輯層面的三個資料庫,切分為三個 “TABLE SPACE”,然後放在同一個實體的 Oracle 資料庫系統內;而若是 MS SQL 或是 MySQL,則是切割為三個 “database”,放入同一個實體資料庫系統內。

當然,若有地理位置或資料庫系統負載的問題,要分散至多個實體的資料庫系統,那也沒問題。例如,進銷存位於三個地點不同的廠,各自配置了三個實體資料庫,各自存放自己的資訊。這也是圖2架構設計的優點,一切分合自如!

e 化的系統設計,即使是 ERP 如此重視資料存取與處理的系統,應該要能摒除傳統以資料庫為中心的設計觀點,因為,系統整體的彈性度會不佳,很難應變需求面的頻繁變更,或是 IT 實體平台,包括資料庫系統的變更等。設計重心應該要轉移至 “Middleware”,這個術語可能太貼近 IT 平台面了,倒不如乾脆這麼說,設計的重心就是回歸至以 “應用系統” 為主,是觀察應用系統可以提供那些服務(services)或功能(functions),這些服務與功能其實就是系統一個個可以量化的子目標(Sub-goal),次一步驟才是考量如何取得要能達成這些子目標的資訊(資料),要取得資訊,就是到實體的倉儲,也就是私有的資料庫系統去找,或是,透過標準的程序,也就是透過標準的介面,至外部系統取得相關的資訓來處理。

【iThome 連載單元—5】釐清系統設計範圍的焦點–建立企業與資訊系統層次的使用案例模型

前言

以「信仁慈善醫院」為例,醫院內的業務服務範圍是何其的廣與雜,院方除了有醫師、護士、藥劑師、行政人員 …等內部工作人員擔負各自的執掌與協調合作外,現代化的醫院更是需要有資訊系統的協助,來減輕工作人員的負擔與達成某種程度的自動化。

顯然,由於院內各種不同的業務,就會有各種不同性質的資訊系統來協助,例如,掛號人員透過 “掛號系統” 來處理病患的掛號資訊;醫生透過 “看診系統”,來查詢與紀錄病人的病歷並開立藥方;藥劑師透過 “藥劑管理系統” 來配送藥品並處理病患的領藥事宜。可以這麼說,一家規模如「信仁慈善綜合醫院」,其內的醫療資訊系統,可能不下數十、甚至上百個系統之多,這些系統是否是由一家承包廠商來統籌管理與發包,是否要求系統的單一平台,以簡化系統的溝通,不得而知,但確定的是,站在院方的角度來看待時,絕對有必要委請熟嫻醫療業務的領域專家(Domain Expert)來規劃與設計、紀錄各類醫療與行政的業務流程 (Business Process),才有可能將流程的部分或全部的活動 (Activity),交付給資訊系統作自動化;同樣地,統籌所有資訊系統的架構整合廠商 (也有可能是院方的資訊單位擔任),必須要能有完整的 “Whole Map”,瞭解哪一個資訊系統是在哪一個業務流程的哪一個活動、有哪些使用者會來使用系統、系統是否會需要另一個資訊系統的服務 …等,如此才有可能清晰、明確地掌握,哪些資訊系統是可以同時外包 (Outsourcing)、哪些系統可以 “再利用” 既有的系統服務,系統之間,又該如何傳遞訊息、如何制訂標準的介面溝通規格。即使你是二包的廠商好了,承接某一個資訊系統的設計與實做,你仍須知道,這個資訊系統是處在整體架構中的哪一個 “點 (系統)”,這個 “點”,有沒有從其它的 “點” 進入的資訊、有沒有要將資訊傳出至其它的 “點”,也就是說,要能清楚系統的設計範圍,是在位於那一個層次(Layer)、系統的範圍又是多廣,與外界的互動又是如何,如有才有可能 “聚焦”,往對的方向走、作對的事 (Do the right thing and Do the thing right)。

企業層次 vs. 資訊系統層次

其實,領域專家是可以與資訊專家合作的,來完成在企業面的設計。對領域專家而言,流程的設計與規劃,是屬於 “企業流程再造 (BRP, Business Process Re-engineering)” 的範疇,而對於資訊專家,是可以把 “企業當系統” 來看待,然後利用 “企業塑模 (Business Modeling)” 的技巧,來協助企業流程、規則等的設計與記錄,真正企業的資產,就是將領域專家們的智慧,經過 “企業塑模” 所粹取之後的產出(Artifacts)!!

參考企業塑模的產出,就可以很清楚地瞭解與規劃,哪一些企業流程的活動,是可以經由資訊系統的協助,來達成自動化或減輕工作人員的負擔。

如何分辨塑模設計的產出是屬於企業的層次,還是屬於資訊系統的範疇呢? 筆者最偏好利用 “使用案例圖 (Use Case Diagram)” 來區分兩者的層次,其實根本原理也就是界定系統的範圍後,區別這個設計的範圍,就能知道是屬於企業還是資訊系統的層次,而且經由一些簡單的原則與步驟,還能從企業層次的使用案例模型,轉成資訊系統層次的使用案例模型。

閱讀全文 »

【iThome 連載單元—4】人面獸身的 ERP 系統–異質平台整合的問題與茫點

案例說明

某一家專事中、大型軟體專案開發的廠商,承包了某家具知名度的製造業 ERP (Enterprise Resource Planning) 應用系統開發,開發與建置成本就高達上千萬以上,企業流程(Business Process) 的客製化 (Customization)需求很高,所以不容易直接以現成的 ERP 產品來套用,而必須為該製造業廠商量身訂製,從頭開發一個新的系統。

客戶單位對系統平台的需求是應用伺服器 (Application Server) 採 J2EE(Java2 Enterprise Edition) 開放式平台的解決方案,主要理由是可以跨作業系統,同時企業系統的核心是採用當時 Java 陣營所力推的 EJB (Enterprise Java Bean) 企業元件標準規格,對於大量交易處理的能力與分散式元件 (Distributed Component)的溝通,均可以達到一定的效能與穩定度。 不過,客戶同時提出另一個要求:客戶端 (Client)端的圖形使用者介面 (GUI, Graphic User Interface) 必須符合 “Rich Client” 的特色,以提供大量豐富又便捷的圖形元件,如此才有可能滿足操作人員 (Operator) 對系統高度的互動性要求。

客戶的系統要求,成為系統開發合約的前提與必要條件,所以承包單位必須提出讓客戶可以接受的實體平台的架構解決方案,該軟體廠商內部的頂尖開發人員,技術水平都相當不錯,為了能同時滿足客戶在前端與中間層 (Middle Tier) 的要求,然後再經由他們的評估並確定技術可行後,就提出了如下圖 1 的三層式 (3-Tier) 實體的平台架構。

前端考量到要能提供豐富多樣化的表單畫面,所以採取了 Delphi 的表單設計,而 Delphi是建基在微軟的 COM 元件規格上。請注意,中間層的 J2EE 應用伺服器是以 Java 為主要的程式開發與執行環境,而Java 可是不與其它的程式語言直接溝通的,Delphi 要能與之溝通,要嘛就採取第三者協力廠商(3rd Party)所提供的 “COM-to-Java Bridge” 的橋接方式,或者採取最簡單的方式,也就是利用 “Web Service” ,透過 HTTP 協定來連結兩個異質的系統。對了,又考量到專案的 “最後期限(Deadline)” ,開發時間永遠是這麼的緊迫,所以他們又採購了價值上百萬,在當時算蠻具規模的元件開發廠商(姑且稱之為 X 廠商)所研發的 “J2EE 快速開發平台” ,並且提供了許多所謂的 “服務性元件框架 (Service Component Framework)”,供開發廠商 “可重用 (Re-use)” 這些便捷的服務性元件。

人面獸身ERP系統的三層式架構
圖1、”人面獸身” ERP 系統的三層式架構

筆者當時任職於某一家軟體顧問公司,該軟體廠商也由於某種機緣,而順帶委請我們評估這樣的系統架構規劃的可行性。筆者當時的老闆對這樣的系統架構,給了一個還真是傳神的批判:人面獸身的系統。

當然,為了說明與讓該軟體廠商的執行長瞭解為什麼這種人面獸身的系統風險很高,筆者的老闆就要求筆者評估並列出未來可能會發生的問題點,並且在風險評估會議中提出看法與理由。

閱讀全文 »

【iThome 連載單元—3】從客戶的角度看待系統整合–軟體主機板的架構設計

案例分析

某一具規模的製造業廠商,採購某家 ERP 產品,並委請該 ERP 廠商作整體系統資源規劃,以整合該公司內部既有 CRM(Customer Relation Management) 與 HR(Human Resource) 系統,同時又外購了 Workflow 產品,打算利用整合的解決方案,並降低建置的成本,以提供公司內部客製化的 “供應鏈(Supply-Chain)” 製程服務。

有趣的是,該製造業資訊部門的 IT 主管,認為整合既有的系統,是採購 ERP 產品時應該 “附帶” 的服務,而且並不覺得資訊系統的整合,會有何技術上的障礙,當然,在採購該 ERP 系統的前期,也已經請 ERP 廠商做過測試,確實可以擷取各資訊系統資料庫內的資料,並 “餵入(Feed)” 至 ERP 的資料庫系統內。

災難開始發生了,上線初期,竟然連第一個企業流程(BP, Business Process)都無法正確執行,更糟糕的是,連問題出在哪裡也不知道,當初評估該 ERP 產品時,明明功能可以符合該專業領域的要求,並且在測試 ERP 系統的內部功能時,也沒有問題,但為什麼要整合其它系統時,就問題層出不窮,甚至到後來,根本就分不清楚問題是出在 ERP 系統,還是原有的系統內。IT 主管焦頭爛耳,開始責怪負責系統整合的 ERP 廠商,沒有盡好整合的責任,並要求限期內解決問題;但廠商也有話說,認為客戶單位一直在變動需求、提供的數據不正確,又如何能做好系統整合?

結局可想而知,雙方各說各話,各據其理,客戶單位認為系統無法上線,拒絕交付尾款,但 ERP 廠商認為已經建置好 ERP 系統,沒有道理客戶不付款,因此雙方鬧得不可開交,甚至上法院打官司。而一打官司,我們也知道,這就已經造成了雙方 “雙輸” 的局面,除了曠時費力,當初 IT 主管不肯再額外負擔系統整合的建置預算,省下一些成本的結果,卻讓已投入的資源,包括人力與財務,都給耗費掉了。更重要的是,問題仍然無法解決!而這樣的戲碼,卻是在業界內,一而再地重覆上演。

問題出在哪裡?

最大的問題,就是客戶單位與 ERP 廠商都只站在各自的角度與觀點來看待系統整合。ERP 常會以 “自我本位” 的角度,以 ERP 系統為中心,來整合其它的系統 (同樣地道理,若由 Workflow 廠商來負責系統整合,那勢必會以 Workflow 系統為整合的中心。);客戶單位的問題是,系統整合是屬於整體性的架構設計範疇,不能單純到將系統的整合交給單一的廠商來負責,而是應該自己接手,也可能是委外專精於架構設計的系統整合廠商來負責。

筆者舉業界最常通用的「資料庫整合」的解決方案為例,來說明所謂「局部觀點」的架構設計下,所衍生的問題。

舊思維–草本植物的資料庫整合

從 ERP 廠商所提出的整合方案,係以 ERP 系統為中心,再由其連結呼叫其它的系統,參考下圖1,從應用系統的角度來觀察時,廠商往往不會注重系統與系統之間相依性(Dependency)關係的設計,他們所想到的,只要能把資料串接起來,完成工作就好了。所以我們觀察圖1,會發現到應用系統之間往往會互為呼叫,也就造成了雙向的相依性關係,而這也正是系統的高耦合 (Coupling)性、彼此糾纏不清的元兇。

以ERP為自我中心的整合
圖1、以ERP為自我中心的整合

再來觀察實體系統的整合實做面,參考下圖2,傳統軟體廠商的整合解決方案是將各系統的資料庫,想辦法整合為單一的資料庫 (Universal Database),尤其,更會以 “自我本位” 的角度來整合其它系統,例如 ERP 廠商,一定是以自己的產品為中心,來整合其它系統,將資料庫匯聚成為單一的共用資料庫,此種架構設計讓我們建構出眾多的『草本植物』型的系統,像稻子一般許多葉子(以表單為主的應用程式)直接銜接到在泥土裡(即資料庫),當資料庫內表格結構一有變動時,各表單的應用程式都會受到影響。因此,整合資料庫時,會影響到許多既有的應用程式,成本極高。此種思維習慣和分工策略並不能充分發揮Web的巨大聯結(connection)潛能,而且未能包容既有系統,無法保護過去的投資。

草本植物型的資料庫整合
圖2、”草本植物” 型的資料庫整合

閱讀全文 »

【iThome 連載單元—2】界定清晰的系統範圍與責任–以土地公廟的系統分析為例

前言

e化的軟體系統開發,已不再如傳統 MIS 的資訊系統開發模式,經常是假設所開發的系統是單一,系統全是由自己從頭到尾所負責來實做完成的。如今 e化系統的開發,更會面臨多個應用系統的整合,團隊內部,可能只是承包實做某整合系統的一小塊範圍,但又需要整合其它的應用系統,在這樣的情況下,團隊必須對所承包的系統,有明確清晰的範圍,才有可能釐清系統所該擔負的責任,以及是如何與其它系統的訊息溝通。

筆者擔任架構師在輔導整合開發專案時,經常會利用 “使用案例圖(Use Case Diagram)” 來界定系統開發的範圍(System Boundary)。明確界定範圍之後,好處多多,可以讓團隊的內部成員能對系統全貌有一致性的認知,也能據此找出使用該系統的參與者(Actor),以及參與者使用該系統的目的(Goal),同時也能區分出系統的 “內” 與 “外”,這可是非常重要,如此才能知道什麼是該作、什麼不需要作。

所謂的 “外”,即代表從系統的外部觀點來看待系統,是從使用者的角度(View)來看待與應用系統之間的互動,又不致干涉到系統實作(how-to)的內部,所專注的僅是在於與系統溝通時訊息(Message)的“進(Request)”與“出(Response)”,也就是從使用者的角度來看時,應用系統是一個 “黑箱(Black-box)”。所以外部觀點,就是表達了系統的需求面,在需求分析階段,分析師要能捕捉(capture)到使用者對系統的期待或想法,也就是要能取得使用者的需求,是相當重要的工作。而使用案例,便是一種極佳的工具,可以容易正確地來捕捉到使用者的需求,又不致陷入於實作的細節內,造成分析癱瘓(analysis paralysis)。

至於 “內”,代表著就是系統內部的結構(Structure),而所謂的結構,必然是由系統內部的靜態(static)元素所組成,從問題領域(Problem)的觀點來看,這些元素係源自於該領域的概念術語,稱為實體(Entity),每一個實體均有所需儲存的資訊,以及應盡的責任,例如 “訂購(Order)”,就是在訂購系統中,非常重要的一個實體,它儲存了訂購相關的資訊,以及必須負擔 “計算訂購總額” 的責任。其實呢,系統分析的工作,目的就在於:如何找出這些 “元素(或稱之實體)”,並賦予每一個元素的責任,這稱之為 “責任分派(Responsibility assign)”,然後系統分析/設計師動態組合這些元素,配合實體平台的服務元件,來滿足系統外部的功能需求。也就是說,靜態面的結構元素,與功能面的行為(Behavior)描述,均是屬於系統分析師的範疇。幾個主要的產出,包括類別(Class)圖、循序(Sequence)圖、資料庫的 E-R(Entity-Relationship)圖,是屬於系統分析/設計師(SA/SD)所該負責的的範疇。

筆者以一個比較淺顯又接近現實生活面的例子,來說明如何利用使用案例圖界定系統範圍,以釐清系統與其內部元素的責任。同時並利用 UML 循序圖,表達系統內部元素之間是如何動態合作,來完成系統的功能需求(使用案例)。

土地公廟的許願–利用使用案例圖界定系統範圍

每次看到使用案例的橢圓形與使用案例所要凸顯的目的,就聯想到,使用案例就如同去道教的廟宇,向神明祈求,並在心裡許願,以求得平安、健康、財富與愛情...等等各種願望。道教的神明,各據地方的廟祀,各司其掌,保佑地方眾生的平安。

使用案例與崇信道教的信眾至廟宇許願,有許多相似之處,例如:

  • 眾神明所居住的廟宇,就如同寫使用案例時,需界定系統範圍。 廟宇=系統。
  • 信徒向神明許願,信徒就是使用系統(廟宇)的參與者(Actor),而所許的願就是使用案例(Use Case)。
  • 許願後還願,是一種契約(Contract),契約就是一種交易(Transaction)。道教是崇尚交易的信仰,向神明許願,若神明滿足信徒的願望,信徒是要還願的;這就如同系統能滿足參與者使用系統的目的(Goal),那麼,每一個所滿足的使用案例就是一個交易,每一個交易是要向客戶計價收費的。
  • 信徒向神明許願,不需要瞭解神明是如何能達成信徒的願望,最終只要能完成你所許的願即可;這如同參與者使用系統的使用案例,不需要瞭解系統是如何(How-to)完成參與者的使用案例,只要能滿足其目的(Goal)即可。

舉個例子,來說明如何利用使用案例 “塑模(Modeling)” 信徒的許願,一段簡單的文字敘述如下:
「兩個信徒,到烘爐地福德宮土地公廟許願。其中信男許的願是 “求得大樂透明牌”;信女許的願是 “求得子息”。」

初期的系統分析,界定系統是 “南山福德宮(烘爐地土地公廟)”,參與者有兩個:一個是 “信男”,另一個是 “信女”;使用案例是 “求得大樂透明牌” 與 “求得子息”,參考下圖1。

南山福德宮廟使用案例圖
圖1、南山福德宮廟使用案例圖

土地公如同人間的里長一般,是屬於地方的行政官員,職司庇佑地方升斗小民包括求財、出外、入厝、動土、農作物的收成、家畜的繁衍...等,但是卻非執掌婦女的生育,這應該是註生娘娘的職掌才對呢。怎麼辦?既然信女都向土地公求子生育了...。

經過玉皇大帝左右手三官大帝(其角色如同系統分析人員)的作業協調與分派,確定求得子息的願望需交由註生娘娘才能完成其目的。但總不能直接在土地公廟拒絕該信女的願望吧?所以,其未來生得子息的實現會轉由註生娘娘來負責的。註生娘娘也是系統,但是祂並不屬於土地公廟的管轄,所以是屬於外部的系統,也就是土地公廟的 “支援性參與者(Supporting Actor)”。

第二次的使用案例系統分析如下圖2。
閱讀全文 »

【iThome 連載單元—1】漫談系統整合—誰是老大?

最近在「iThome 雜誌」的技術專題上連載我對軟體架構的看法,並利用一些以往所碰過的個案來探討。每一個單元以一張(最多兩張) UML 圖為主軸,再以此延伸,以文字敘述出來,文章內容會有些批判與暗諷性質,當然不會指名道姓。

連載主題:軟體架構鮮思維—利用 UML 圖看圖說故事。
第一期的主題是從我以前 Blog 所整理出來的,題目是:「漫談系統整合—誰是老大?」

因為雜誌版面有限,無法將我完整的內容刊出,所以待雜誌出刊後,同時我會將我的原稿公布在 Blog 內,供讀者們參考。

另,包括大陸的雜誌,也同時有邀稿,所以關於爾後的投稿內容,我均會公布在新分類「雜誌邀稿」上。

前言

筆者擔任軟體顧問輔導與服務已多年,本身所擔任的角色為 “軟體架構師(Software Architect)” 一職,輔導的對象為一般軟體 ISV(Independent Software Vendor) 以及中、大型公司的 IT 部門。擔任架構師多年,經常一直思考架構師的職掌及所該具備的技能與素養,也逐漸培養出一種直覺、感覺,往往一眼可以看出某系統的架構好壞、或是軟體設計師的設計意涵等...。也藉此,筆者準備在本連載單元內,以曾經輔導過的個案,或所經歷、看過的一些 “現象” ,包括個人的心得與體會等,以 UML 圖來 “看圖說故事”,每一個單元都是一段個案、故事,同時也是案例分析。藉由各種面象與分析,帶領讀者們來看待與解釋架構,在之前,筆者先對 “架構” 一詞作個基本的說明。

由於國內軟體應用開發廠商係偏以專案開發(Project-based)的方式來從事應用軟體開發,而專案開發,先天有個不良的本質 – 時間永遠不足,所以專案開發的首要目標是要在有限甚至不合理的時程內把系統給 “做出來”,再來是求效能佳,至於彈性、可維護性等,那是以後的事情,而根本問題是,那個 “以後” 也就是系統爾後糾纏不清的 “病因”,同時,這也導致軟體開發人員普遍存在一個很大的茫點 – 見樹不見林。

那個 “樹” 代表著軟體技術人員只重視將系統給做出來的實體平台“技術”,諸如深入去瞭解 “如何用” .NET 或 J2EE 的系統平台技術;或是系統分析人員往 “問題領域(Problem Domain)” 的方向鑽研。兩者卻鮮少用心於 “純” 軟體設計,俱足軟體領域應有的技能與技術,那麼,什麼是 “純” 軟體的技術? 答案又是很簡單:抽象(Abstraction)、封裝(Encapsulation)、介面(Interface)與相依性(Dependency)分析的觀念 …等。

兩者的角色,一則往系統面的技術鑽研;一則往問題領域面的知識來走,兩者是越來越偏離,而不容易有互補了。自然而然,這也就如 “第五項修練” 一書所提及的,開發團隊已經喪失了整體系統思考的主動積極,同時,那個 “林”,也就是一種 “整體”,或稱之為 “架構(Architecture)”,早已蕩然無存,不知架構為何物了。

什麼是架構(Architecture)?

架構(Architecture)一詞,非常之難解釋,若真要一言以蔽之,那麼,可以說, ”架構” 是一種整體觀,需要保持從各角度看待架構時,仍有一致性與調和的觀點。

對 ”架構” 要能有充分的理解與認識,至少要能確實瞭解與體會下列幾個與架構至為關鍵的意涵與術語,包括了:整體-局部(Whole-Part)、觀點(View),包括巨(Macro)觀與微(Micro)觀、焦點(Focus)、層次(Layer)與廣度(Boundary)等。

擔任軟體架構師(Software Architect)必備的素養,即在於:觀照整體的能力。

筆者在輔導許多軟體公司的專案開發與教育訓練時,發現到與開發團隊對 “架構” 一詞的認知與定義大不相同。個人發現到,大部分的 IT 技術開發人員,所表達出來的架構,是比較偏向於實體層次如 .NET, J2EE 的 IT 技術層次。不是不對,而是 IT 實體層次僅是架構的觀點之一,並不足以代表整體的架構觀。

筆者想試著利用以上述幾個術語來解釋 “架構”。畢竟,架構的設計,牽涉到相關於設計中系統的議題與範圍太廣了,包括:團隊開發的共識、開發流程(Development Process)的制訂,分工與外包(Outsourcing)控管、系統的彈性、延展(Scalibility)與維護性等。

金剛經有云:「凡所有相,皆屬虛妄,見諸相非相,即見如來」。
“相”,是被具化、可以看得到的形,如同軟體模型,是被具化的產出(Artifact),也就是 “相”。而 “如來”,是不著相的,架構即為如來,所以架構也可以說是一種空、無。

問題來了,既然不著相,你又如何知道何為正道,何為如來?

佛教禪宗有個「以指標月」的譬喻:對於一個從不來不知月亮為何物的人,在蒼茫的星空中,不知那一個叫做月亮,這時候就需要一個認識月亮的人,用手指著月亮說:「那就是月亮」。同樣的道理,你又能如何瞭解甚至來驗證架構(如來)的正確性呢?

有經驗的架構師(Architect),會以各種不同的角度(以上所涵蓋的幾個術語),建構各類型的軟體模型,來看待並解釋「架構」。如同「以指標月」一般,對架構有深一層體會的架構師,會以導師(Mentor)的角色,利用各種工具來具化產出,以引導系統開發團隊的成員們認識「架構」。

UML, 程式碼等只是個標示工具,而所謂「架構」,是一種共識、一種默契、一種無以言欲的整體調和感。

閱讀全文 »

軟體思維顧問

專職軟體輔導與教育訓練的獨立顧問。輔導企業資訊單位如何有效組織系統開發與維護;輔導開發人員達成有效的專業分工。傳授如何把軟體作軟 (Keeping Software Soft)的技能,得以提昇系統的彈性/延展,並進而創造系統的再利用價值。

Personal