0

MDX クエリを動的に生成しています。Columns ([DimesnionName].[Attribute.Name] 形式)、Rows ([DimesnionName].[Attribute.Name] 形式)、および Filter ([DimesnionName].[Attribute.Name].[Member Name] 形式) のリストを渡します。キューブ名、ページ番号、メジャーなどの他の入力とともに

この情報は C# ライブラリに渡され、多くの 'If' および 'Else' 条件を使用してこの入力を処理し、MDX クエリを文字列として生成します。多くの文字列操作が必要です。

ワークフローがあると言えます。各条件を通過した後、システムは何らかの出力を生成します。このライブラリを設計するためのよりスマートな方法があるかどうか疑問に思っています。

  1. if else 条件を削除したい。
  2. もっと読みやすくしたい。
  3. もっと扱いやすくしたい

私の質問は次のとおりです。使用できる設計原則はありますか? Windows WorkFlow を使用することが考えられます。あなたの提案を提供してください

4

1 に答える 1

0

私は実際に誰かがそれを行ったかどうかを確認するためにここにいるので、そうする必要はありません。これまでのところ運がありません。しかし、頭のてっぺんから見てみたいと思うのは、ターゲット文字列の状態を評価し、さまざまな基準を追加する何らかの形式のルール エンジンです。

今はまだ MDX の構文を調べ始めていません。私はそれほど進んでいませんが、SQLクエリを作成するエンジンを作成したい場合は、列のリスト、テーブル、およびwhere句のリストが必要な部分(最も単純なケースを最初に)を見ていきます。したがって、3 つまたは 2 つだけの基本的なエンジン クラスを持つことができます。1 つは文字列のリスト and (または式のリスト) を取り、それらを連結します (または評価してから連結します)。ターゲット文字列が空の場合、targetString = "select "+ x でなければ targetString = ", " + x. 次に、where 式で同様のことを行います。where 式などのさまざまな形式を実装するクラスを構築するために、かなり凝ったものにすることができます。次に、最終的にエンジンを次のように渡します

MySqlEngine(new[] {"FirstName", "LastName", "GirlFriendsAddress"},
           new []{EqualsExpression("FirstName","Brown"), EqualsExpression("LastName",Dynamite")},
           "People");

そしてそれは戻ってきます

"SELECT FirstName, LastName, GirlFriendsAddress From People Where FirstName = \"Brown\" AND LastName = \"Dynamite\""

式を使用して、テーブルに一致するターゲット モデルのプロパティを評価することを強くお勧めします。次に、モデルに同じ名前を付けることができ、where句のターゲット値以外の文字列を使用しないため、テーブル名に提供する必要がない MySqlEnigine(...) を作成できます。

これがあなたが望むエンジンではないことはわかっていますが、MDX についてはまだ知らないので、これを類推として使用する必要があります。

最終的な考え Window Workflow は使用しないでください。あなたは途中で自殺したいと思うでしょうし、あなたがそれを最後までやり遂げたなら、将来何年にもわたってあなたの名前を呪う開発者がいるでしょう.

幸運を

ああ、それをビルドする場合は、それをオープンソースにして教えてください。私はそれをする必要はありません。

于 2013-08-30T13:45:46.570 に答える