淺論資訊系統的分層結構

領域模型具體化到資訊系統的實現,必須配合現實的技術平台,包括系統廠商所提供的 圖形使用者介面(GUI, Graphic User Interface)的使用、開發與呈現(例如 Browser, Struts/ASP.NET, Web Server)、資料永續儲存的儲存庫(一般泛稱資料庫, Database,如 Oracle, MySQL)、應用程式伺服器(Application Server, 又可稱之為 Middleware, 提供包括如交易, 權限控管, 分散, 資源控管等系統服務,如 MTS, JBoss, WebLogic),尤其是為了能完整實現領域模型的建構與實現,更需要能讓程式開發人員有物件導向程式語言(OOP, Object-Oriented Programming)的開發機制,例如 .NET 平台所提供的 VB.NET, C#.NET,以及 J2EE 平台的 Java 語言,甚而 PHP, Ruby 等,也都是提供物件化的開發機制。只是後者與前兩者的差別在於,PHP,Ruby 等所提供的系統框架(System Framework)偏於 Web 端的開發,而 .NET 與 J2EE 則在UI端、中間層(Middleware)等均提供了適合於企業層級系統開發的 Frameworks,得以享有諸多便利的系統服務機制。

參考下圖,典型的所謂物件導向式資訊系統在設計時會分成幾個分層的結構與模組(modules)。

圖、資訊系統的分層結構
(點擊圖片鏈接看原圖)圖、資訊系統的分層結構

幾個主要的分層結構如:

  • 表達層(Presentation):圖形使用者操作介面,包括 Windows Form, Web Form, Java Swing 等,都是屬於系統廠商所提供給圖形介面開發人員來使用的工具與框架。
  • 中間層:領域物件模型主要所在的位置。為了應付功能性需求,UI 端的功能性呼叫(functional call)是透過中間層的控制物件(Co, Control Object)來控制與協調為完成該功能所需要相關領域物件互動參與的資訊與企業邏輯(business logic)運算;為了隔離外部系統(包括資料庫與外部系統)的變動性,控制物件會透過 邊界類型的物件(boundary object),如 永續性物件(PO, Persistent Object),連結資料庫系統、調變性物件(AO, Adapter Object),連結外部系統,如 Mainframe, Message Quese System, 其它需透過介面(interface)傳遞的系統等,來取得外部系統的資訊。而真正軟體的主結構,其實就是落在 Domain 物件(在中間層稱之為企業物件,Bo, Business Object)上,也就是源自於問題領域的概念性物件,以滿足應用程式的需求。所謂的軟體結構分析設計人員,其實就是應該要聚焦在如何作好領域物件的結構分析與設計!

    三種類型的物件(Control, Entity, Boundary),均會呼叫系統平台所提供的技術層級服務,瞭解平台特性的系統設計人員,會透過系統框架(System Frameworks)所提供的 APIs(Application Programming Interfaces),來呼叫取得所需要的系統服務。這些服務通常與應用領域無關,例如與資料庫之間的溝通介面或記錄程式執行與錯誤的紀錄(log),這些是系統廠商(.NET or J2EE),甚至是 3rd party 的工具廠商,所會提供的。請注意! 不要把這些類型的系統物件當作是要 「可重用(reuse)」 的對象,領域物件才是! 它們只是便於取得系統服務的工具物件而已,會隨著技術的規格變動而變動,甚至有更好用的工具出現,就要換掉原來在用、卻不會影響到系統的主結構。

  • 資料層:中間層領域物件在妥協於現實(記憶體容量與揮發性問題)的技術環境下,需把其狀態(state)永續(persistent)儲存於資料庫內,並且需要使用資料時再透過永續性的機制,將其取出至中間層的領域物件,運算取得結果,並送達至客戶端呈現。現今對於企業層級主流的資料庫系統是以 關連式(Relation)DB 為主,例如 Oracle, MySQL, SQL Server 等。同時關連式資料庫也是最有效可以完整表達問題領域的資料模型,它運用 E-R(Entity-Relationship)的分析技術,就可以呈現為資料庫的 Table Schema,而且其分析的手法與在中間層對於領域物件的分析方式是一致的,可以說 領域物件模型 與 E-R 模型 是 本是同根生(源自於問題領域),而兩者主要的差別只在於,E-R 呈現的是領域概念的資料層,而領域物件(企業物件)則再加上物件應有的行為(behavior),在軟體模型中,是稱之為操作(operation),而在程式語言中,則稱之為 方法(method)。

文章導覽

   

共有 1 則迴響

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *