Domain logic approochs

1、Transaction Script

What is it
        不少企業應用能夠當作一系列的事務,每個事務能夠經過使用一個Transaction Script來處理。算法

How it works
        使用Transaction Script,咱們能夠專一於處理好每個事務,而沒必要考慮其餘事務的影響,所做的就是獲得輸入,查詢數據庫,處理事務,保存結果。
        Transaction Script能夠有兩種方法組織成類。一種是將同一領域的幾個Transaction Script放在一個獨立的類中;另外一種是採用Command模式,將每個Transaction Script組織成一個Command基類的子類;固然,也能夠不要組織成類,而使用全局函數的方式,可是類的方式更易於隔離數據。數據庫

When to use it
        Transaction Script最大的優勢和缺點,都是在於它的簡單性。優勢是代碼的簡單易懂,運行效率也不錯;缺點是極可能出現代碼重複,固然這個能夠經過重構來減輕,更重要的是,隨着企業事務複雜性的增長,Transaction Script就會變得力不從心。
        Transaction Script下的開發有如下特徵:對象類只包括數據,不包括任何事務相關的算法,每每就是數據庫中表結構的類化;調用的Sql語句經常在Transaction Script核心函數中出現,固然這個是很差的設計,應該使用好比Table Data GateWay等模式,將Sql語句封裝在wrapper中,來進行數據庫交互,而核心函數直接訪問wrapper的方法來進行事務處理數據結構

2、Domain Model

What is it
        隨着企業事務的複雜化,咱們應該採用Domain Model模式來開發應用。Domain Model是一種將數據與其行爲集成在一塊兒的模式app

How it work
        使用Domain Model時,咱們須要在應用程序中加入一個完整的對象層,這些對象模仿業務系統中的對象及其邏輯規則,這和Transaction Script中對象僅僅是數據不包含業務邏輯造成最大的區別
        一個Simple Domain Model看上去和數據庫設計很是類似,每一個Domain Object對應一個數據表,可使用Active Record模式來和數據庫交互;Rich Domain Model則否則,經過使用繼承,策略等模式和相互關聯的對象網,Rich Domain Model能夠更好的處理更復雜的邏輯,同時也增長了和數據庫間映射的難度,這時能夠採用Data Mapper模式來應對。
        基於業務邏輯的多變性,數據對象層也應該可以更靈活的創建,修改和測試,這樣,咱們必須儘可能減小該層同其餘層次間的耦合。數據庫設計

When to use it
        當你面對一個涉及驗證,計算等等複雜多變行爲的業務規則時,你須要考慮使用Domain Model。使用Domain Model時,數據庫交互方面的第一選擇是Data Mapper,它有助於使你的對象層同數據庫獨立。你也能夠考慮使用Service Layer來給你的Domain Model暴露出更加清晰的API。
        使用Domain Model很大的好處是,經過對象類的繼承多態等性質,能夠方便的擴展模型,以適應多變的企業邏輯,同時減輕重複代碼的現象。函數

和Transaction Script的區別
Transaction Script : 從數據庫讀取數據 -〉 以讀取的數據集做爲參數,調用Transaction處理類
Domain Model      : 從數據庫讀取數據 -〉 映射爲數據對象類 -〉 調用對象類的成員函數來處理企業事務測試

3、Table Module

What is it
    Table Module是處理一個數據表或者數據視圖全部行的業務邏輯的一個單獨的實例。
    通常的,Domain Model等傳統面向對象模式都創建在對象/身份的基礎之上,就是說好比一個員工類的實例就對應着一個特定的員工,這樣咱們能夠執行員工操做,獲取員工信息等。這些模式的很差之處在於很難和關係數據庫造成好的接口,致使咱們要做大量工做用於處理數據在業務層和數據庫這兩個表現徹底不一樣的層次之間的傳遞。
    Table Module則否則,它對於數據庫中的每一個表創建一個類的實例,用來操做該表中的數據。.net

How it works
    Table Module模式使得咱們能夠打包數據和它們的行爲,並同數據庫保持很好的聯繫。它經常做爲面向表的後臺數據結構,而表狀的數據通常的是Sql語句調用的RecordSet返回值。
    Table Module便可以使類的單獨實例,也能夠是類的一組靜態函數。採用實例的方式給咱們更大的好處,便於經過一個存在的RecordSet來初始化,也很容易的經過繼承等方式進行擴展。
    Table Module模式能夠經過廠模式來實現請求,另外的方法是經過Table Data Gateway,很差的是引入了Table Data Gateway類和機制,好的方面是咱們能夠只使用一個Table Module了,對於不一樣的數據源,採用不一樣的Table Data Gateway就能夠了
    Table Module使用方法是:首先經過Table Data Gateway把數據裝成RecordSet,而後以其爲參數建立Table Module,經過Table Module來處理業務邏輯,並把修改的結果傳回數據庫。中間的過程當中,RecordSet數據一直在內存中,而沒必要返回數據庫。
    固然Table Module並不侷限於表,表/視圖/Sql查詢結果等均可以應用此模式設計

When to use it
    Table Module基於面向表的數據,並且它必定是把數據結構放在整個代碼的中心。面對一個複雜的業務邏輯,它不能提供足夠的實例-to-實例的能力,在處理多態上也存在不足,這時咱們仍是應該採用Domain Model,Domain Model+Active Record也能夠處理表狀的數據。
    Table Module在COM應用中比較常見,這是由於微軟的ADO庫提供了一個很好的機制,使用RecordSet來處理數據庫的數據。對象

轉自連接:http://www.javashuo.com/article/p-kcmpkzeu-mg.html

相關文章
相關標籤/搜索