2009-04-17 123 views
0

我基本上有一個與任何業務邏輯完全隔離的數據庫層。這意味着只要我準備好將某些業務數據提交給數據庫,就必須將所有業務屬性都傳遞給數據方法的參數。例如:處理SQL參數的最佳方法?

Public Function Commit(foo as object) as Boolean

這工作得很好,但是當我進入提交併有幾十個參數的更新,它可以是一個大量的輸入。更不用說,我的兩個方法 - 更新和創建 - 採取相同的參數,因爲他們基本上做同樣的事情。我想知道的是,什麼是傳遞這些參數的最佳解決方案,以便我不必每次更改這兩個方法時都更改這些參數,以及減少我的輸入:)我想到了一些可能的解決方案。一種方法是將所有sql參數移動到數據類的類級別,然後將它們存儲在業務層中設置的某種數組中。任何幫助將是有用的!

+0

你能詳細說明你在DAL中的代碼嗎?你是否將對象傳遞給DAL方法,然後將參數設置爲該對象的屬性? – 2009-04-17 19:43:56

+0

Russ:是的,我正在做這件事,但我傳遞的對象是本機CLR類型,而不是具有它們自己屬性的類對象。 – Austin 2009-04-20 15:58:36

回答

0

感謝您的回覆,但我想我已經想出了一個更好的方式來完成我正在做的事情。這與使用upsert類似,但我所做的是使用一種名爲Commit的方法來查找給定的主鍵。如果在數據庫中找到該記錄,則執行更新命令。如果沒有,我做一個插入命令。由於參數相同,因此您不必擔心更改它們。

0

所以基本上你想通過ListParameters

爲什麼不重新提交您的Commit函數並讓它接受Parameter對象列表?

+0

我在想這是要走的路,但我會等着看有沒有人想出別的東西。 – Austin 2009-04-17 19:32:24

0

如果您在SQL 2008上可以使用合併替換插入/更新雜耍。有時稱爲upsert。

0

您可以創建一個struct來保存參數值。

0

對於你的問題我猜Iterator設計模式是最好的解決方案。通過一個接口實現說ICommitableValues你可以像這樣傳遞一個密鑰對枚舉值。密鑰是列名稱,值是列可接受的值。一個屬性甚至專用於返回插入這些值和/或存儲過程等的表名稱。

要保存輸入,您可以使用聲明性編程語法(屬性)來聲明可中斷的屬性和中間件中的主類可以使用反射來提取這些可共享屬性的值,並從中準備一個ICommitableEnumeration實現。

相關問題