php中如何解决函数参数列表过长问题
想写个灵活拼接sql语句的函数,把select,from,where,group by,order by,limit这些都作为参数传递。但是如果每一个都作为独立的参数传递,调用函数的时候,就会受到参数顺序的限制,简单的sql也可能写好几个无用空参数。如果要是通过构造一个对象来传递所有参数,参数列表短了,也不受顺序限制了,但是每次调用函数前又都要构造对象,也挺麻烦,感觉用起来不自然。有什么好的方法解决吗?
nodice
11 years, 6 months ago
Answers
过长的函数拼接 可读性 差,也就是说, 代码没有表达性 。
给楼主一个DSL的传送门,很可以没有对应中文版 http://en.wikipedia.org/wiki/Domain-s...
如果你不喜欢面对对象的语法:
query().from("user") .where( (user.firstName.like("Bob")).or(user.firstName.like("Ann"))) .orderBy(user.firstName.asc()) .list(user);
面向对象语法:
InsertSQL sql = new InsertSQL(); sql.insertInto("students") .value("id", new Integer(id)) .value("name", name) .value("gender", gender);
-----------------------------------
最后赠送你一个我以前用过的DSL
/** * 配置路由规则 */ RouteBuilder builder = new RouteBuilder() { public void configure() { from("/user").filter(header("language").isEqualTo("zh")).to("/zh/user"); from("/user/edit/3").choice() .when(header("foo").isEqualTo("bar")).to("queue:d") .when(header("foo").isEqualTo("cheese")).to("queue:e") .otherwise().to("queue:f"); } };
具有表达性的代码是: 做什么,而不是怎么做 。
放开那个萝莉
answered 11 years, 6 months ago