我们正在动态生成MDX查询。我们传递列的列表([DimesnionName]。[Attribute.Name]格式),行([DimesnionName]。[Attribute.Name]格式)和过滤器([DimesnionName]。[Attribute.Name]。[Member Name]格式)以及其他输入,如多维数据集名称,页码,度量等。
此信息传递到C#库,然后我们使用大量“If”和“Else”条件来处理此输入并生成MDX查询作为字符串。它需要大量的字符串操作。
你可以说它有一个工作流程。在完成每个条件后,系统会生成一些输出。我想知道是否有更聪明的方法来设计这个库。
我的问题是:我可以使用任何设计原则吗?我可以想到使用Windows WorkFlow。请提供您的建议
答案 0 :(得分:0)
我实际上是在这里看看是否有人这样做了所以我不必这样做。到目前为止没有运气。但是,您可能想要了解的是某种形式的规则引擎,它将评估目标字符串的状态并添加您的各种标准。
现在我还没有开始研究MDX的语法。我不是那么远,但如果我想创建一个引擎来创建SQL查询,我会查看部分(最简单的情况),你需要列列表,表和where子句列表。因此,您可以拥有三个或者可能只有两个基本引擎类,它们采用字符串列表和(或者更好的表达式列表)并连接它们(或者计算然后连接它们)。如果目标字符串为空,则targetString =“select”+ x else 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\""
我强烈建议使用表达式来评估与您的表匹配的目标模型的属性。然后你可以创建你不必提供给表名的MySqlEnigine(...),因为你的模型可以被命名为相同,除了where子句的目标值之外你不会使用任何字符串。
我知道这不是你想要的引擎,但我还不知道MDX所以你必须将它作为一个类比。
最后的想法不要使用窗口工作流程。你会希望自己中途消磨,如果你完成了这一切,那么将来会有许多开发人员诅咒你的名字。
祝你好运哦,如果你建立了请开源它并告诉我所以我没有必要这样做。