2011-07-28 68 views
3

我經常看到用於在應用程序中編寫業務邏輯的存儲過程。有時這些特效將包含1000多行代碼。如果我在包含1000行的應用程序代碼中編寫方法/函數,將會受到批評。如果長時間存儲的過程被分解爲單獨的過程,就像類中的方法一樣?什麼不是做得更多,因爲它肯定會使代碼更加可用。存儲過程構造

+3

因爲SQL是基於SET的,而不是程序性的。 1,000行是可疑的,但不是一個真正的指標,說明有什麼不對... –

+0

這帶來了另一個問題。許多人主張存儲過程中的業務邏輯。在不判斷這種方法的情況下,業務邏輯通常是程序化的,那麼數據庫應該如何構建? – Craig

+0

數據庫中有很多地方可以實現業務邏輯:表,它們的關係,觸發器和其他約束 –

回答

1

首先,我同意納特的答案:對於T-SQL調試工具(如調試器)提供遠不及人們發現其他語言的功能。

其次,在存儲過程之間傳遞值時存在一些潛在的挑戰。傳遞簡單的數據類型非常簡單。傳遞涉及的數據類型變得更加複雜。使用臨時表,XML,分隔字符串,記錄集等需要額外的編碼,產生額外的開銷,並且具有性能影響。

我的「規則」是,如果輸入和輸出參數可以用標準方法(即標準數據類型)來處理,然後打破了存儲過程是必要的。如果傳遞輸入和輸出需要大量編碼工作,那麼存儲過程仍然很大。

3

喜歡你的地方,你需要開始考慮爲你的數據庫服務層的點這聽起來我。這將允許您將業務邏輯轉換爲適用於大量程序代碼的更合適的語言,同時仍然通過批准的API強制訪問數據庫。

1

我認爲「代碼行」是衡量代碼可重用性的一個不好的方法。我認爲你需要對這些「長期」程序進行更加定性的審視。過去我有幾個很長的程序,是否可以縮短任何代碼並且模塊化真的取決於 - 其他應用程序真正重用的任何邏輯,還是更多地是教科書的願望?我相信有很多的模塊赫然出現在是超過1000行的代碼,不需要被別人批評或分解成更小的部分企業應用...

這是否意味着你已經程序看到有1000多行代碼是合理的?當然不是。我只是想強調一些代碼行不是你應該看的唯一因素。

+0

重複使用不是闖入獨立特效的唯一原因。在C#中,你可以有一個包含許多私有方法的類,它們根本不是在外部調用的,而是用於分解代碼。 – Craig

+0

但是「分解代碼」的目的是什麼?爲什麼我必須追蹤15個不同程序的定義,以確定僅用於單個存儲過程的15條邏輯? –

+0

因爲它更易於閱讀。 – Craig

0

絕對的,長存儲特效應被分解成的被重複使用的和健壯的代碼短塊。不幸的是,數據庫開發中使用的語言和工具不支持以實際的方式做到這一點。

0

當你的SP這麼大,你可以definitelly說,這個過程「做了很多事情。」如果是這樣,你應該單獨做這些事情。 正如我在前面看到的,如果你需要支持這個功能,很容易重構這種SP一次,而不是使用1000行意大利麪條代碼。