2

オブジェクト グラフに対して優れたパターン マッチング (テキストではなくオブジェクトの正規表現を考えてください) を提供する .NET ライブラリを知っている人はいますか?

私が考えることができる最も近いものはOmetaですが、.NETバージョンは瀕死のようです。

編集

この質問は、私が取り組んでいるアイデアに関するもので、何よりも研究開発段階にあります。問題のアプリケーションは仕様を受け取り、それらをリポジトリに渡します。リポジトリは、(ラムダを使用して) Entity Framework を使用してそれらを 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 クエリとして考えるのもよいでしょう。

4

1 に答える 1

1

これがlinqだけでは達成できないとは確信していません。

ただし、 Interpreter patternを実装できます。

于 2012-11-05T19:01:35.963 に答える