正文

業(yè)務(wù)邏輯層:組織(3)

ASP.NET設(shè)計模式 作者:(美)Scott Millett


可以看出,整個業(yè)務(wù)實例被封裝到一個單獨的方法中。BookHolidayFor方法處理許多責(zé)任,如數(shù)據(jù)檢索和持久化,以及用來確定是否可以休假的業(yè)務(wù)邏輯。這種過程式編程風(fēng)格違背了面向?qū)ο缶幊痰幕纠砟?。如果邏輯始終非常簡單、應(yīng)用程序較小且易于管理,那么該方式?jīng)]有問題。

如果應(yīng)用程序較小,而且業(yè)務(wù)邏輯簡單,不需要采用完全的面向?qū)ο蠓椒?,Transaction Script模式可能比較合適。但是,如果應(yīng)用程序規(guī)模會變大,那就可能需要重新考慮業(yè)務(wù)邏輯結(jié)構(gòu)并尋求更具伸縮性的模式,如Active Record模式,這正是4.1.2小節(jié)的主題。

4.1.2  Active Record

Active Record模式是一種流行的模式,尤其在底層數(shù)據(jù)庫模型匹配業(yè)務(wù)模型時它特別有效。通常,數(shù)據(jù)庫中的每張表都對應(yīng)一個業(yè)務(wù)對象。業(yè)務(wù)對象表示表中的一行,并且包含數(shù)據(jù)、行為以及持久化該對象的工具,此外還有添加新實例和查找對象集合所需的方法。圖4-2展示一個博客應(yīng)用程序中的Post和Comment對象如何與它們對應(yīng)的數(shù)據(jù)庫表關(guān)聯(lián)起來。該圖還說明Post中含有一個Comment對象集合。

在Active Record模式中,每個業(yè)務(wù)對象均負(fù)責(zé)自己的持久化和相關(guān)的業(yè)務(wù)邏輯。

Active Record模式非常適用于在數(shù)據(jù)模型和業(yè)務(wù)模型之間具有一對一映射關(guān)系的簡單應(yīng)用程序,如博客或論壇引擎。如果已經(jīng)有數(shù)據(jù)庫模型或者希望采用“數(shù)據(jù)優(yōu)先”的方法來構(gòu)建應(yīng)用程序,這也是一個可用的好模式。因為業(yè)務(wù)對象與數(shù)據(jù)庫中的表具有一對一映射關(guān)系,而且均具有相同的創(chuàng)建、讀取、更新和刪除(CRUD)方法,所以可以使用代碼生成工具自動生成業(yè)務(wù)模型。優(yōu)秀的代碼生成工具還會內(nèi)置所有的數(shù)據(jù)庫驗證邏輯,以確保只有有效的數(shù)據(jù)才會持久化。在第7章中討論如何持久化業(yè)務(wù)對象時將研究業(yè)務(wù)對象自動化生成以及使用Active Record模式的框架。與Transaction Script模式一樣,Active Record模式也非常簡單而且易于掌握。

Active Record模式隨著基于數(shù)據(jù)庫的Web應(yīng)用程序而流行,其中一個典型就是結(jié)合了MVC模式(第8章)和Active Record ORM(第7章)的Ruby on Rails框架。在.NET領(lǐng)域,構(gòu)建在NHibernate(第7章)之上的Castle ActiveRecord項目是最流行的開放源代碼Active Record框架之一,本書將使用該項目以及ASP.NET MVC應(yīng)用程序來構(gòu)建一個簡單的博客網(wǎng)站。因為博客網(wǎng)站只包含少量的業(yè)務(wù)邏輯,因此在業(yè)務(wù)對象和數(shù)據(jù)模型之間存在較好的相關(guān)性,Active Record模式此時就是一個很好的選擇。


上一章目錄下一章

Copyright ? 讀書網(wǎng) www.talentonion.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號 鄂公網(wǎng)安備 42010302001612號