工作中遇到的需求,对一些投资项目进行收益评估.其中涉及到各种财务数据的计算.分析人员需要通过输入不同的参数来对投资收益进行对比以此来决定对项目如何进行投资以及如何控制各项成本.
问题和解决思路
因为涉及到很多公式,不同的公式需要带入其他公式运算的结果,因此用代码和函数来处理变得非常复杂.各种调用和数据结构的处理让公式的修改和调试异常困难.
无论经过多少变换,每个公式实际到最后都是映射到了一个输入的值.
因此写了这个库用来对各种公式进行统一管理.通过一个Context
来管理每个公式的运算结果.跟踪每个公式运行所依赖的公式.无论任何公式都可以是通过上层的公式最终映射到一个输入值.
这种方式与依赖注入(Dependency injection)的方式很相似.所以使用之前框架的方式进行了处理.在Context
中解决依赖.并记录依赖的树. 当从Context
获取一个数据时.会自动去运算相关的公式.并记录该值的运算过程.这样当某个输入变量进行修改时可以删除必要的缓存.让其重新计算.提高计算效率.
使用说明
CCM Git库 vincentmi/ccm
加入到composer.json
composer require vincentmi/ccm
composer update
test.php
<?php
require 'vendor/autoload.php';
use CCM\Context;
$ctx = new Context();
echo $ctx->set('a',1)->set('b',1)->reg('c','$a + $b')->fetch('c');
## 打印依赖
$ctx->getDepends('c');
## 打印调用堆栈
$ctx->getCalls();
「真诚赞赏,手留余香」
标签
aframe
andrew-ng
arduino
blockchain
cgi
consul
docker
eth
ethereum
evm
feign
flask
golang
hw
java
javascript
jpa
js
k8s
kubernetes
linux
mac
machine-learning
math
mysql
nginx
op
opentcv
ops
poco
pptp
python
rd
spring
springboot
ssl
thymeleaf
type
vagrant
vpn
vue
webrtc
workflow
技术文章
新浪博客
无聊
生活
生活记录
股票
运维