測試SQL Server商務規則連結方法

來源:互聯網
上載者:User

有一個古老的爭論,是關於在哪裡儲存應用程式商務邏輯的:是在應用程式本身的商務邏輯層中還是在資料庫層中。應用程式邏輯層的絕對支援者提出,資料庫的唯一目的就是儲存資料,以備應用程式所用。提倡用資料庫來儲存商務規則的人則堅持認為,商務規則最好儲存在資料庫中,因為資料也儲存在那裡,規則在那裡更容易運行。而在我看來,對於儲存應用程式的邏輯來說,沒有一個“最好的地方”——它真正取決於您正在解決的業務問題。

連結資料庫預存程序

如果您更喜歡將全部或一部分商務邏輯儲存在資料庫中的話,那麼知道SQL Server中的一種被我稱作商務規則連結的技術是很有好處的。基本思想就是您可以在資料庫中運行一系列的預存程序,這是以在您需要的時候,不同進程的中繼資料存放區在一個資料庫表格中為基礎的。這樣做的好處就是,規則都儲存在資料庫的程式中,並且因為預存程序的運行是以一個表格中的值為基礎的,所以您可以改變程式執行的順序,還能夠很容易地開啟或終止商務規則。讓我們來看一個例子,這樣概念會更清晰。

商務規則連結執行個體

要用我想用的方式在資料庫中執行商務規則,就必須定義中繼資料。下面這些資訊將會以資料庫表格的形式被儲存:預存程序的名稱、商務規則啟動並執行順序、所運行業務程式的類型和商務規則是否活動等。列表A中包括了建立表格的指令碼。

在列表B中,我在BusinessLogic表中載入了資料。這些資料是稍後我將用來處理商務規則的。RunSequence是執行預存程序的實際順序(過程被儲存在LogicProcedure欄位中)。表格中還包含了一個指示符,用來表示商務規則是否為活動的。儲存這個資料讓我能夠改變規則啟動並執行順序,或者在需要的時候開啟或終止規則,而無需對代碼做出更改。要向商務邏輯系統中添加規則也十分簡單,因為所需做的就是向資料庫中添加程式,然後在中繼資料表格中添加需要的資料就可以了。

在列表C中,我建立了商務規則程式(例子中包含的程式是非常簡單的;但是,在現實情況中,如果需要的話,它們可以很複雜)。所有的程式中包括了相同的輸入參數;這是商務規則連結的一個小小的局限性。

接下來就是處理商務規則的代碼了。在列表D中,我用一個指標在表格中迭代,該表格中的記錄都儲存著中繼資料。當可以用一種不同的迴圈結構來完成同一個邏輯時,用指標要簡單一些。不管是怎麼樣完成的,都需要用某種類型的迭代迴圈和執行所需要的業務程式。運行這個代碼將執行每一個文章前面所定義的四個預存程序。

在列表D中,有兩個主要引人注意的地方。第一個就是用來從表格中檢索記錄的select語句,所檢索的記錄中包含了處理商務規則的資訊。從這個簡單的查詢中,我可以為任何類型的業務處理從BusinessLogic表中返回行。我還能保證規則是活動的,並且按照它們需要執行的順序返回。

第二個就是執行商務規則的方式。當指標迭代時,它從BusinessLogic表中檢索將要被執行的預存程序的名稱,然後將其儲存在一個邏輯變數中。EXECUTE命令允許使用者執行預存程序,即使該預存程序的名稱被儲存在一個變數中。在這種方式下,調用預存程序還使得我能夠向預存程序中輸入所需的參數。

這使我回到了先前關於業務程式具有相同數量的輸入參數這一點。我能夠以一種相當動態方式運行業務程式,這取決於在程式運行時BusinessLogic表中儲存了什麼。但是,現在我還沒有一種方法可以動態地向業務程式輸入參數。

一種簡單的解決辦法就是保證所有的業務程式接受相同數量的參數,不管用不用它們。這種技術保證我們始終為業務程式提供所需的參數。也有其他的方法可以實現這些所需參數的輸入,但是那些不是這篇文章所要討論的。

扼要重述

如果您的應用程式在資料庫中儲存它的任何一個或全部商務邏輯,那麼有可能它就是被我稱作商務規則連結的一個候選者。這種方法允許預存程序在資料庫中依次運行,並且讓您能夠在需要的時候開啟或終止這些商務規則。使用這種方法的一些潛在缺陷包括資料安全(執行業務程式的資料儲存在一個表格中),和向商務邏輯程式輸入參數的非動態性。如果您覺得對於您的業務問題來說,這種方法利大於弊的話,我鼓勵您嘗試一下這種方法。

Tim Chapman是肯塔基州路易維爾市一家銀行的SQL Server資料庫管理員,他有超過7年的行業經驗。他還通過了微軟SQL Server 2000和SQL Server 2005的認證。



相關文章

Cloud Intelligence Leading the Digital Future

Alibaba Cloud ACtivate Online Conference, Nov. 20th & 21st, 2019 (UTC+08)

Register Now >

Starter Package

SSD Cloud server and data transfer for only $2.50 a month

Get Started >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。