惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

酷 壳 – CoolShell
酷 壳 – CoolShell
G
Google Developers Blog
L
LangChain Blog
Y
Y Combinator Blog
Vercel News
Vercel News
WordPress大学
WordPress大学
大猫的无限游戏
大猫的无限游戏
博客园 - Franky
V
Visual Studio Blog
小众软件
小众软件
月光博客
月光博客
A
About on SuperTechFans
H
Hackread – Cybersecurity News, Data Breaches, AI and More
T
The Blog of Author Tim Ferriss
有赞技术团队
有赞技术团队
M
MIT News - Artificial intelligence
阮一峰的网络日志
阮一峰的网络日志
Last Week in AI
Last Week in AI
博客园 - 【当耐特】
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
MongoDB | Blog
MongoDB | Blog
Jina AI
Jina AI
美团技术团队
量子位

博客园 - Kevin-moon

在IE中本地浏览与服务器浏览同一Html后,出现了奇异的结果 如何避免JQuery Dialog的内存泄露 JQuery另类视角-动态执行脚本的BUG JQuery另类视角-动态扩展对象 - Kevin-moon - 博客园 如何重构代码-简单、灵活的实现对象复制 如何重构代码-重构计划 如何重构代码-思路和方法 谈谈多线程的思维方式 简单的数据移动算法(C#) [ASP.NET MVC]-理解Routing 笑死人的十项大奖 深入APM,实现自己的APM [Windbg基础]-了解Symbols 深入线程,实现自定义的SynchronizationContext 重温ASP.NET的配置信息(简单、常用) 奇妙的SynchronizationContext 线程之间的通讯---SynchronizationContext "对象"到"山寨对象"的完整转换 我真的就只能在远方看你吗?!!! "测试驱动开发(TDD)"
动态进行"自定义公式"计算
Kevin-moon · 2008-12-11 · via 博客园 - Kevin-moon

     这几天弄完了一个"自定义公式计算"的方案,觉得比较有意思,在这里就共享下!


     该方案是针对一些需要用户自己去定义"计算公式",然后通过这个公式得出计算的结果这种需求的,特别适用与一些产品的BOM(在制作BOM的时候,需要去设定BOM中每个物料的数量,当这个BOM在比较复杂的时候直接去设定物料的数量,这点就不能去满足,因为有些物料是和其中的一些有关系的,所以这些的数据也想通过公式来建立关联关系并且得到数量)。
     例如,A产品由B和C组成,在这里面B和C有一定的关联,C的数量是B数量的2陪,当出现这种情况的时候,用户就想通过修改B的数量,然后联动修改C的数量,但是这些公式需要允许用户自己去定义。这种类试的问题就是可以通过这个来搞定的。
     大概可以解决的问题,大家应该了解了吧!那么如何使用和基本原理?

让我们先从用户使用的角度开始吧:


1、用户定义了下面结构的产品BOM:

2、现在去需要关联的产品设定数量的公式,从而达到联动改变的效果
相关产品的公式:
产品C: return [产品B]+[产品D];
产品E: return [产品C]*2 + 10;........

这里关于公式有个需要说明的地方:公式中的参数必须要在"[]"里面,必须要有return,除了这两个,其他定义的规范就是和C#一样,因为在内部是把这些转换为代码来执行的。其实在这里,公式的定义对于用户来说,还是需要做些简单培训的,因为要让用户去熟悉C#中简单的算术计算和一些基本的规范。
3、设置产品BOM中每个物料的数量,OK!调用我们的程序去完成工作吧。
那么用户部分的工作就全部结束了。

下面我们进入程序部分:


     先看下程序的流程图:

     程序将产品BOM中公式计算相关的所有物料都当成一个参数(CParamter)对象,对于其中有公式的参数,程序动态的将这些公式进行解析并生成公式类(继承于IFormula接口),然后将不同的公式类对象赋予到参数的Formula属性中,参数的PValue(值)通过这个公式对象的计算方法来得到值,而计算方法就是根据用户定义的公式来解析的。这里的核心部分就是动态的去利用自定义公式生成每个公式类并和参数建立起关系。

下面是所有的类图:

动态生成公式和模板类的代码:

Code

生成后的公式类和模板类

Code

单元测试的代码:

Code

     觉得这个方案对于需要进行自定义公式进行计算的用户,还是不错的!

源代码:DynamicCalculate.rar