2010-12-09 54 views
2

到目前爲止,我還沒有找到對我的問題的答案,我想我有一段時間要問我的第一個問題。開始。從業務層中的數據訪問層過濾結果

我有一個數據訪問層,負責與各種數據存儲元素進行交互,並在查詢事物時返回POCO或POCO集合。

我有一個位於此之上的業務層,負責實現從數據訪問層返回的對象的業務規則。

例如,我有一個SQL Table of Dogs,我的數據訪問層可以返回那個Dog列表作爲一個Dog對象的集合。然後,我的業務層將執行諸如篩選低於特定年齡段的狗,或根據業務規則必須發生的任何其他過濾或轉換。

我的問題是這樣的。根據相關記錄處理過濾對象的最佳方法是什麼?假設我希望所有擁有貓的人。現在我的數據訪問層可以返回所有的貓和所有的人,但是不會爲我做任何過濾。

我可以通過不同的數據訪問方法實現濾波(即DAO.GetCatPeople()),但是這可能會變得複雜,如果我有相關的屬性或關係的多種處理

我可以從兩個都返回並在業務層完成自己的所有匹配,這看起來像很多額外的工作,並沒有充分利用SQL服務器。

我可以寫一個數據過濾接口,如果我的數據訪問層發生變化,這個層也必須改變。

這裏有一些已知的最佳實踐,我可以從中受益嗎?

回答

2

我採取的觀點是,有兩個「原因」你爲什麼要訪問數據:以數據爲中心和以用例爲中心。

  • Data Centric是類似於CRUD和其他常見/顯而易見的東西,這是毫不費力的東西。
  • 「用例」中心是您定義接口並匹配POCO用於特定用途的地方。 [有可能我在這裏錯過了一些常用術語,但用例中心是我的意思]

我認爲這兩種類型都是有效的。對於用例驅動的應用程序來說,它主要是由以業務爲中心的用例驅動的,但我可以看到邊緣案例,他們可以在技術上更受驅動 - 只要他們沒有違反任何業務規則或變態你的領域模型。

貓和狗應該彼此瞭解嗎?如果它們存在於相同的域模型中,並且在該模型中建立了關係 - 那麼當然是的,您應該可以進行如GetCatPeople()這樣的查詢。

就管理複雜性而言,而不是GetCatPeople()您可以有一個更通用的方法,將屬性作爲參數:GetPeopleByAnimal(animal)

相關問題