聲明:這不是「不要使用存儲過程 - 想到孩子們!」後,我不打算點燃火焰戰爭。我只是建議代碼重用更容易,可能更適合某些情況和平臺。
代碼重用作爲一個概念通常會改善代碼庫。你保留着東西DRY,並開始形成一個共同的功能層,以同樣的方式解決常見的問題。
然而,就像任何事情一樣,人們可以弄錯它(權力來自責任等等等等等等)。
在大多數現代編程語言中,通過編寫函數或者創建可以一次又一次使用的整個框架來重用代碼是相對簡單的。但是,在T-SQL中,這是棘手的,因爲你的選擇較少。存儲過程可以做到這一點,但是你已經看到了它們可能會有多尷尬。
我個人的偏好是保持業務邏輯不在數據庫中。這意味着我不使用視圖,UDF,sprocs等(除非在性能分析後我們認爲我們可以使用這些技術加快速度),而是將其保留在我的應用程序代碼中。這往往會引起「業務邏輯層」的思考,但有各種各樣的風格,所以它可能是一個誤用。不過,這當然不是直接位於UI按鈕點擊處理程序之後的代碼。
我的目標是限制數據庫存儲和檢索數據,因爲這就是他們擅長的。我們都知道笨重和過時的T-SQL可以作爲一種語言(想想異常處理,部署,遊標等)。如果您的應用程序被寫入數據庫本身,並且您也無法擴展您的應用程序,因爲數據庫不可知是完全不可能的,因爲數據庫是應用程序。如果您在應用程序代碼中擁有該業務邏輯,則可以更容易地擴展它。
在這種情況下,「業務邏輯」是用於生成報表的查詢和轉換,並且我將研究在考慮其他選項之前如何在報表工具/代碼中重用代碼。
「我現在認爲代碼重用不一定會增強數據庫設計的可維護性。」是主要問題,其餘部分是針對上下文的。 – gb2d 2011-01-19 12:39:57
存儲過程的標題中是否有任何特定限制的原因?這些不是代碼重用的唯一機制。 – 2011-01-19 12:44:14
不是。我知道有幾種方法可以實現代碼重用。 – gb2d 2011-01-19 12:45:39