我应该使用哪种设计模式来获取查询参数并组合它们来创建过滤的sql查询

我应该使用哪种设计模式来获取查询参数并组合它们来创建过滤的sql查询,sql,url,design-patterns,filter,Sql,Url,Design Patterns,Filter,如果我有一个可以接受大量参数的url,那么我想动态地混合和匹配这些参数,以创建sql查询来返回结果 P>哪些设计模式可以考虑从参数创建过滤器? 例如: mySite.com?name=tom&color=red&size=large等 所需的sql输出 从mytable中选择*,其中name=tom,color=red,size=large 这在小范围内是微不足道的,但是当您有一组来自过滤器面板的变量参数,其中包括日期和匹配查询字符串等,并且您希望整洁、可维护地将它们组装到sql查询中,同时检

如果我有一个可以接受大量参数的url,那么我想动态地混合和匹配这些参数,以创建sql查询来返回结果

<> P>哪些设计模式可以考虑从参数创建过滤器?

例如:

mySite.com?name=tom&color=red&size=large等

所需的sql输出 从mytable中选择*,其中name=tom,color=red,size=large


这在小范围内是微不足道的,但是当您有一组来自过滤器面板的变量参数,其中包括日期和匹配查询字符串等,并且您希望整洁、可维护地将它们组装到sql查询中,同时检查和清理数据时,事情可能会出错。。冗长的。我已经写了很多if/else风格的过滤方法,这有点像是维护的噩梦。

对于这种情况,我喜欢使用decorator模式,您可以动态地构建/混合“成分”


我认为维基百科确实有一个很好的例子(咖啡制作场景):

对于这种场景,我喜欢使用decorator模式,您可以动态构建/混合“成分”


我认为维基百科确实有一个很好的例子(咖啡制作场景):

你能澄清一下你的场景吗?特别是,您可以更具体地介绍“从参数创建过滤器”部分。至于构建查询,您可以使用。您不能用参数的名称和值填充映射吗?为了澄清。。。由许多通过外键相关的表组成的sql数据库。通过url传入的大量参数,其中大多数是可选的。在最终传递生成的sql以执行并返回结果之前,我需要将这些参数混合并匹配到sql中(包括连接等)@雷克斯在他的回答中提出了装饰图案,我必须说,这看起来很有希望。我可以从一个基本查询开始,将从url提取的各种条件“修饰”到基本查询上,也许…@stan0对于键值映射来说太复杂了,因为在某些情况下需要连接,在某些情况下不需要连接。此外,我希望能够在几乎每种情况下检查输入,并进行各种翻译,例如url参数可能是&timeofday=午后,但查询需要是time\u of_day\u id=3或类似的。您能澄清您的情况吗?特别是,您可以更具体地介绍“从参数创建过滤器”部分。至于构建查询,您可以使用。您不能用参数的名称和值填充映射吗?为了澄清。。。由许多通过外键相关的表组成的sql数据库。通过url传入的大量参数,其中大多数是可选的。在最终传递生成的sql以执行并返回结果之前,我需要将这些参数混合并匹配到sql中(包括连接等)@雷克斯在他的回答中提出了装饰图案,我必须说,这看起来很有希望。我可以从一个基本查询开始,将从url提取的各种条件“修饰”到基本查询上,也许…@stan0对于键值映射来说太复杂了,因为在某些情况下需要连接,在某些情况下不需要连接。此外,我希望能够在几乎所有情况下检查输入,并进行各种翻译,例如url参数可能是&timeofday=午后,但查询需要是time\u of_day\u id=3或类似的。因此,您是否可以从基本查询开始,然后为查询添加更多条件?是的,有点。对于复杂的场景,如连接等,可能需要为每种类型的连接使用另一个基类。为了便于使用,您可能希望将其与Facade和Factory模式混合使用。然后,您会从一个基本查询开始,然后为查询添加更多条件吗?是的,有点。对于复杂的场景,如连接等,可能需要为每种类型的连接使用另一个基类。为了使其易于使用,您可能希望将其与外观和工厂模式混合使用