活用 J2EE Design Patterns — 探討 Session Facade、Application Service、Business 三者的關係

「Core J2EE Design Patterns 」一書,提出了許多實用的設計樣式(Patterns),以應用在 J2EE(尤其以 EJB 為核心)平台環境下的最佳實務與設計策略。

整本書將所揭露的樣式整理分類為三個階層(tiers):Presentation Tier、Business Tier、Integration Tier。

對應問題領域(Problem Domain)所建構的物件模型(Object Model),在 UML 是以類別圖(Class Diagram)來實作的,是位於 Business Tier 所稱之的 Business Object。而類別圖亦即為整個軟體系統的核心結構。結構分析與設計的好壞差別,會明顯反應在系統的效能與需求的變動管理上。

尤以後者,最重要的設計考量:如何將變動侷限在一小塊範圍之內。
為了達成此一目的,「低耦合性(loose coupling)」「高內聚力(high cohesion)」是在設計的階段中,時常所需要觀照與調和的。

位於 Business Tier 內 Session Facade、Application Service 兩個樣式的揭露,即在於期望能達成上述「低耦合性」與「高內聚力」的設計考量。

我看了許多篇國外的文章與討論,發現到許多 Developer 並不是很瞭解這兩個樣式的目的與應用。其實仔細去觀察思考,這兩個樣式均旨在 "保護企業物件(Business Object)", 為了保護企業物件,所以需要能封裝(Encapsulate) 客戶(Client)端 直接對企業物件的存取。除了封裝的考量外,另外也需要有一個控制協調的角色,稱之為控制物件(Control Object)。來協調多個企業物件之間的互動合作。

所以,上述兩個樣式的設計應用,是誰負責封裝?、誰負責控制呢?
從該書的內容,許多讀者會以為 Session Facade 是負責封裝,Application Service 是負責控制協調。
其實,不然不然,兩者都可以是封裝的角色,也可以是控制者的角色。

而事實上,Session Facade、Application Service、Business Object 三者的關係是源自於 MVC (Model-View-Controller) 的設計模式。MVC 樣式的目的即在於解開不同類型物件(例如 UI 物件與企業物件)之間的糾結,增進系統的彈性與元件的再利用性。參考如下圖一。

MVC 設計模式的對應關係
圖一、MVC 設計模式的對應關係

若從另外一個角度來觀察時,Session Facade 是可以 "聚合(aggregiate)" 多個 Application Service,以組合併實現更為複雜的企業流程。此時,Session Facade 是擔任著主要控制協調者的角色,而 Applicatin Service,成為可以被 "共用(Share)" 的企業流程物件了。參考如下圖二。

SF、AS、BO 實作 Controller、CBPO、CBO 三個階層的關係
圖二、SF、AS、BO 實作 Controller、CBPO、CBO 三個階層的關係

閱讀全文 »

淺論系統內部的結構分析與設計

什麼是系統內部的結構(Structure)?

  • 系統內部(內涵),由某些單元或元素所組合而成為一個整體(Whole)。
  • 系統被視為一個整體時,即具備了系統功能(System Functions),可以提供服務(Services),以應付外部的需求。
  • 系統作為一個整體時,其應付外部需求變動的彈性(Flexibility) 取決於內部的結構分析(Analysis)與設計(Design)程度。
  • 莫僅從表面看事務,即便連藝術家如達文西,在描繪人像時,會去研究及實驗人體解剖,以觀察及瞭解人體結構的奧妙。

什麼是系統的結構分析與設計?

  • 找出與描述系統組成結構的元素 – 分析(Analysis);尋求一個解決方案(Solution),利用結構內部的元素,動態組合以滿足外部的功能需求 – 設計(Design)。
  • “Do the right thing (分析)”and “Do the thing right (設計)”。

系統結構分析與設計的手法

  • 以組成元素來區分

    • Non Object-based
      • Procedure-based and Data-Oriented
      • Form + Script (Function) + Data-model
    • Object-Oriented
      • Functional Object – 源自於需求(Requirements)
      • Entity(Essential) Object – 源自於領域概念(Domain Concepts)
  • 以系統分析的思維來區分
    • Functional-based Decomposition
    • Essential Object-based Decomposition

Non Object-based Structure
圖1、Non Object-based Structure

閱讀全文 »

「大題小作」 vs. 「小題大作」

當我希望能快速一窺整體系統的全貌,而將複雜的局部細節封裝(encapsulate)時,我會「大題小作、化繁為簡」

當我希望將焦點擺在某一局部,並把該局部視為一個整體(whole),剖開局部探究內部的細節時,我會「小題大作、、化簡為繁」

溝通時,需要先釐清彼此所討論的主題是擺在「大題小作」上,還是「小題大作」?
免得因為對範圍(Boundary)、層次(Layer)認知上的不同,而雞同鴨講

簡單的利器 – 原型(Prototype)

參考:「簡單就是力量」。

原型(Prototype)的目的:

  • 建築師、產品設計師、軟體設計師…,以 “原型” 做為與客戶溝通、達成共識的橋樑,然後才著手執行。透過原型,大家比較容易對概念(Concept)產生共鳴,並致力改變尚未成形的東西。
  • 原型協助架構(Architecture)的建立,讓大家能容易看到整體、更具宏觀的角度來看待複雜系統。並因此而避免一頭就栽進種種的細節(Detail)。
  • 原型可把目標清晰地描繪出來,並且讓每個關係人(Stakeholder)都更容易提供意見,進行改革。

原型的三大指導原則:

  1. 在架構落實以前,讓員工(團隊成員)能自由表達看法,並進行討論、提出建議。
  2. 讓員工(團隊成員)隨時表達意見,有機會影響你正著手進行的方案。
  3. 不斷加快前述兩個步驟(一般稱之為「快速建構原型」)。

簡單化的公司(團隊),可以讓三方隨時有機會提出對其基礎規劃的意見,這三方包括顧客、公司(團隊、專案經理),以及參與規劃、設計及執行的員工(團隊成員)。
這類公司(團隊)會站在使用者的立場及觀點,打造一個不斷變化、難以預料的未來。而最有效的方法就是建構 原型(Prototype)!!

淺論「軟體系統整合」觀

Key abstraction:

  • 軟體廠商應該要能化被動為主動–不是只被動的順應客戶所提出的需求(Requirements),而是要能主動的幫客戶引導出潛在的需求,進而提昇其整體價值。
  • 放棄本位主義,以 同理心 站在客戶的角度來思考,系統整合如何能包容既有系統,保護過去的投資。
  • 軟體廠商要能確保其核心價值之所在,期能使之成為同質性領域內的 No.1。而系統整合,則是掩護核心價值的幕前推手。
    • 核心價值:汽車引擎、關鍵性零組件的專業設計–Domain Framework Design。
    • 系統整合:車體結構–軟體貨櫃。
    • 客製化(Customization):汽車組裝–客製化的產品。
  • 以快速 Prototyping 來展示系統整合的威力,提昇客戶的信賴度及增進團隊開發的信心。

前言:

「從 A 到 A+」一書提到:所謂的「刺蝟原則」代表著公司除了擁有核心事業、核心競爭力外,還必須在該領域達到頂尖的水準。

以此原則來檢視優秀的應用系統軟體開發公司要能在其應用領域的範圍內建構出頂尖水準的核心價值。就如同 Nvidia 在整個 PC 產業中,只專注在繪圖的領域,而開發出超高水平的 3D繪圖卡,使得其它的廠商無法與之抗衡。

與硬體產業較不同的是,硬體的週邊設備及組件均有標準的介面架構在以主機板為中心所組合而成的 PC 系統。而軟體應用系統的介面卻是相當的模糊,模組(Module)與模組之間,並不容易釐清標準的介面何在。有鑑於此,逐漸已有國際的組織如 OMG 在訂製所謂應用軟體標準的介面,例如有 Workflow 的 WFMC 標準,PDM 的 Enabler 規格等。

有了標準的介面,軟體公司更應該來擁抱標準,在標準界面的規範下,發揮「刺蝟原則」,提升其核心競爭的價值,全力發展 Business Framework 的設計,達到世界頂尖的水準。

為了提昇其核心價值(Domain Framework),直接所衝擊的是應用系統要能包容於客戶既有(Legacy)的系統,『系統整合』的最大考驗即在於如何跳脫出子系統之間繁雜的牽絆,能從以整體為出發點的架構觀點(Architecture View)來讓各子系統之間平衡的協調,而具有整體系統的和諧、生生不息的高度彈性。

『系統整合』這把大刀耍得好的話,則更會讓其核心價值達到 A+ 的效果。
所以…
「系統整合」是術 ;「核心 Domain Framework」是略。
「系統整合」是偏 ;「核心 Domain Framework」是正。

戰術與戰略的搭配,正道佐以偏道的支援,才能使得軟體公司達到「基業長青」的永續經營。

要能達成整體、和諧的「系統整合」,軟體公司全體的團隊(包括銷售及開發人員)要更能以大格局宏觀的角度,放棄本位主義(不以自家產品為整合的中心),化被動為主動,發掘及創造出客戶更巨大的利基。

「不行不能知,惟行而後乃能知其知之真偽與是非也」。

「系統整合」的最佳驗證即在於「實踐」,以具體的行動展示而能讓客戶信服,且提昇團隊內部的信心。 『Prototyping』是展示「系統整合」的最佳利器。

閱讀全文 »

軟體思維顧問

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

Personal