2012-11-05 115 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

回答