2012-11-05 64 views
2

是否有人知道.NET庫針對對象圖提供了良好的模式匹配(認爲對象的正則表達式而不是文本)?用於模式匹配POCO的庫

我能想到的最接近的是Ometa,但.NET版本似乎已經垂死。

編輯

這個問題涉及到一個想法,我對工作更多的是比什麼都將R & d階段。有問題的應用程序接受specifications並將它們傳遞給存儲庫,然後使用實體框架將它們(使用它們的lambdas)轉換爲SQL。

作爲一種通用技術,這項工作正常。但對於一些疑問,結果非常緩慢。這個想法是在存儲庫中有一些優化規則,它檢查傳入規範是否匹配其中一個優化的手寫查詢。

舉個例子,讓我們說,我們用規範的模型,看起來像這樣:

class Person 
{ 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    List<PhoneNumber> PhoneNumbers { get; set; } 
} 

class PhoneNumber 
{ 
    public string Number { get; set; } 
    public PhoneNumberType PhoneNumberType { get; set; } 
} 

enum PhoneNumberType 
{ 
     Cell, 
     Landline 
} 

然後我們的基本規格:

interface ISpecification<T> 
{ 
    Expression<Func<T,bool>> Predicate { get; } 
} 

class GetPersonByPhoneNumberTypeSpecification : ISpecification<Person> 
{ 
     public PhoneNumberType PhoneNumberType { get; set; } 

     public Expression<Func<Person,bool>> Predicate 
     { 
      return a => a.PhoneNumbers.Any(b => b.PhoneNumberType == PhoneNumberType); 
     } 
} 

class GetPersonRequest 
{ 
     ISpecification Specification { get; set; } 
} 

在庫中,我們可能會有一個手寫查詢來選擇具有與其關聯的特定電話號碼類型的用戶,並且如果查詢匹配,則想要使用它。

整個觀點可以說,無需編寫大量代碼來檢查整個可組合規範,即給定的請求具有給定的「形狀」。想象一下這樣的對象匹配語言。

另一種考慮此問題的方式很可能是用於對象而不是XML的XPath查詢。

+2

你想做什麼? 「對象圖的正則表達式」似乎太模糊不清,我想不出直接應用。 – Tejs

+0

除非您動態加載DLL,否則這通常是開發人員的工作。如果你能控制雙方,那麼帶接口的類庫也可以解決這個問題。 –

+2

你想達到什麼樣的例子? – weston

回答