<分区>
是否有人知道 .NET 库可以针对对象图提供良好的模式匹配(想想对象而不是文本的正则表达式)?
我能想到的最接近的是Ometa ,但 .NET 版本似乎已奄奄一息。
编辑
这个问题与我正在研究的一个想法有关,该想法更多地处于研发阶段。有问题的应用程序接受 specifications并将它们传递到存储库,然后存储库使用 Entity Framework 将它们(使用它们的 lambda)转换为 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 查询。