2011-01-11 50 views
1

什麼時候謂詞合適,什麼是最佳使用模式?謂詞的優點是什麼?什麼時候謂詞合適,什麼是最佳使用模式

在我看來,像大多數情況下,可以使用謂詞的緊密循環將完成相同的功能?

我沒有看到一個可重用性的參數,因爲你可能只會在一個方法中實現一個謂詞嗎?

他們看起來很不錯,但除此之外,他們似乎只在需要對集合類進行快速入門時纔會使用它們?

UPDATE

但是,爲什麼你會一次又一次地改寫了緊密的循環?

在我的腦海裏/代碼,當涉及到收藏我總是落得像

Class Person 
End Class 

Class PersonList 
    Inherits List(Of Person) 

    Function FindByName(Name) as Person 
     tight loop.... 
    End Function 
End Class 

@Ani

通過同樣的邏輯,我可以實現的方法,這樣

Class PersonList 
    Inherits List(Of Person) 

    Function FindByName(Name) as PersonList 
    End Function 

    Function FindByAge(Age) as PersonList 
    End Function 

    Function FindBySocialSecurityNumber(SocialSecurityNumber) as PersonList 
    End Function 
End Class 

並稱之爲

Dim res as PersonList = MyList.FindByName("Max").FindByAge(25).FindBySocialSecurityNumber(1234) 

並且結果與代碼量及其可重用性大體相同,不是嗎?

我不是爭辯只是試圖理解。

+0

爲什麼要使用SQL而不是自己在緊密循環中走表?它看起來很不錯,但除此之外,似乎只有在需要對數據庫進行快速入侵時纔會使用它。 – 2011-01-11 03:23:18

+2

(針對您的更新) - 對於一個現實的場景,爲什麼不實施*緊密的循環?另外,爲什麼不寫`FindByName`,`FindByAge`,`FindBySocialSecurityNumber`?如果用戶想要找到24歲到34歲之間的人,該怎麼辦?你能寫出所有可能的過濾器嗎?如果循環邏輯更復雜呢? – Ani 2011-01-11 03:39:39

回答

2

謂詞的一個主要優點是可組合性。例如,在我的自然語言項目中,我有通過自然語言輸入創建的複雜日期時間查詢,例如'2010年5月的每個星期四'都會成爲通過組合一系列謂詞而創建的數據庫查詢。

與表達式結合時,謂詞變得更加強大,因爲處理可以推遲到運行時間,甚至可能交給其他系統執行(例如Linq to Entities)。

謂詞也是函數式編程的關鍵。

1

在我看來,像在那裏 謂詞可以採用緊 循環完成同樣的功能 大多數情況下?

的想法是,你會被一遍又一遍地寫相同的「從緊」迴路「相同相同,但不同」的場景,不同的只是它的「條件」的一部分。爲什麼不使用框架內置的能力以一種簡單的方式指定這個條件,把它作爲「循環」方法的一個參數並且用它來完成呢?

1

使用謂詞背後的想法/模式是當您需要將一組條件應用於一組數據以轉換數據時。您可以編寫一個循環來實現相同的最終目標,但通常您只是在查詢某些條件集的數據,然後將它的合格部分收集到列表中。通過使用框架支持謂詞的能力,擴展代碼的新開發人員不必重新創建用於收集合格數據的機制。

相關問題