2014-01-24 139 views
0

我有一個n層應用程序,其中包括數據訪問層(DAL)和業務邏輯層(BLL)。我在用來填充我的對象的DAL中使用SQL查詢和存儲過程。DAL中的默認排序順序是否違反了關注點分離

因此,這裏是我的問題:

是否在我的SQL查詢的ORDER BY條款違反了關注點分離?

一方面,似乎排序邏輯屬於業務層,因爲它是我們的業務規則,它決定了我們爲什麼要按特定順序顯示數據。另外,我們可能希望以多種方式顯示相同的數據。此外,我的數據訪問代碼不應該不知道如何顯示的問題?

另一方面,數據庫通常比應用程序代碼更有效地對數據進行排序,所以出於性能方面的考慮,在BLL中進行排序時會有ORDER BY子句的激勵。另外,我不確定是否在DAL中指定默認排序順序確實違反了關注點分離。記錄必須以某種方式從數據庫中提取出來。爲什麼不根據最常見的情況對它們進行分類?在我們需要與默認不同的排序順序的情況下,我們可以通過BLL中的某種方法進行排序。

+0

不知道我是否會反對那種存在,但個人而言,我認爲我的業務邏輯依賴於來自我的訪問層的排序會感到不舒服。 –

+0

@ChadSchouggins不知道我關注。你的意思是你不相信誰會在DAL中包含排序邏輯? –

回答

0

我覺得如果您有一個'默認'排序設置,在沒有提供給過程的排序設置的情況下應用。

這將使代碼重新使用和靈活前進....例如,如果您想允許用戶自己定義排序設置?

我不認爲這是違規行爲,因爲許多表都有明顯的默認排序邏輯,否則需要重複應用一次又一次。而且你說在數據庫級應用排序更有效。

+0

同意@trucker_jim,在DAL級別添加一個order by子句只是提供一個默認的排序順序,這可以看作是一種優化,特別是如果這種排序經常使用。總是試圖讓DBMS做盡可能多的繁重工作,這是它的目的。 – 2014-06-09 16:51:07

+0

感謝您的回答。我基於幾乎沒有強烈反應的事實自己得出了很多結論,所以我認爲這不是什麼大不了的事情。我來自數據驅動的背景,並同意讓數據庫做「重負」,但我發現在面向對象的世界中,許多人將數據庫視爲二等公民,並且不希望任何「邏輯」在數據庫級別。我將@ChadSchouggins的評論解釋爲不適合將來自DAL的排序順序作爲該思維模式的指示。 –