配置中的动态代码
遇到的问题
配置化完成后使用时很爽,但开发时却时常遇到为支持可配置的痛苦。
为了支持可配置,无疑增加了设计难度,虽然增加了难度,如果仍能保持设计的简单,则是最推荐的;但有时会增加不必要的复杂性,反而觉得如果在配置中支持一定的逻辑表达,则会让整体设计更简单。
分析
这其实就是要求能够解析并执行部分代码。JavaScript 中的 eval 就是做这个事的,但大家都不推荐使用,因为输入的代码无法保证安全,推荐使用另一个 Function,在输入的参数上做限制,而在配置中的代码部分,则约定只使用传入的参数。
比如,像下面这样注入支持的功能,当做参数传给 Function:
复制代码
在配置中就可以像下面这样使用:
复制代码
为了进一步的安全性,可以在动态创建函数前,对函数体的部分增加校验。因为大部分配置中的代码都是一行代码,可以通过正则表达式来限定输入的内容。
如此,不用自己实现一个 DSL,借助动态创建函数,以及往函数中注入需要动态调用的功能,让可配置的功能能力大为增强。最关键的是在灵活配置和功能扩展上可以取的一个平衡,让整体设计保持简单。
版权声明: 本文为 InfoQ 作者【顿晓】的原创文章。
原文链接:【http://xie.infoq.cn/article/c27321f6246e2ec7a7bf047da】。文章转载请联系作者。
评论