「编程模型」C++ 组合逻辑
引子
C++中可以用来表达逻辑的有下面几种方法:
函数,这里专指自由函数「free function」,也称非成员函数,可以自由调用
方法,这里专指成员函数,通过对象来调用
Lambda,指「Lambda」表达式,也称匿名函数,或「in-place functions」,一般配合闭包,可以自由调用
场景
业务的逻辑就是由上面的几种方法实现单个拼图,然后再组合起来,最终实现完整的功能。
当然,业务逻辑怎么拆分成单个拼图,也是个大问题,而且不仅仅是技术问题,这里我们尝试通过「技术上有哪些组合逻辑的方式」来为逻辑拆分提供帮助。
解决方案
封装单个拼图
从复杂度来说,小规模逻辑(3 行以内代码)先用 Lambda 实现,大规模逻辑定义成函数或方法;
从复用度来说,只有一处调用的代码先用 Lambda 实现,需要多处调用复用时再提取出函数或方法;
从稳定度来说,易变化的代码先用 Lambda 实现,功能发布后趋于稳定的代码可以提取成函数或方法;
从表达力来说,如果 Lambda 的实现不够直观表达逻辑的意图,最好定义一个函数或方法来表达其意图。
独立逻辑的组合
最简单的情况就是顺序调用多个逻辑,组合到新的函数、方法或 Lambda 中。
逻辑关系的组合
这种情况下,每段逻辑的返回值是逻辑值「true」和「false」,然后通过逻辑运算符组合完成需要的逻辑。
常用的组合方式有:any、all、none。
管道式组合
每段逻辑的输入输出具有依赖关系,前一段逻辑的输出做为后一段逻辑的输入。
组合逻辑应用于迭代处理
迭代处理的逻辑特点就是:输入输出是
将逻辑应用于数据
C++11 有个神器std::function,可以用来保存任何Callable目标,上面提到的逻辑表达方式只是其中比较常用的几种。
版权声明: 本文为 InfoQ 作者【顿晓】的原创文章。
原文链接:【http://xie.infoq.cn/article/58a3268d8bcacb7cbb556b38d】。文章转载请联系作者。
评论