从明天起终于可以休息了.停下来休养身体,扎实学习一下技术,顺便写写这几年做过的东西.
第一个,是一个基于SQL SERVER的规则引擎,写于2011年,
当时不知道有规则引擎这东西,为了实现这样一个功能,自己写了一个,当时起的名字是"策略引擎",这个名字相当可是想了好久(给自己开发的东西命名是很爽的事)。
背景
我就职于一家联通代理商,是最早的一批联通3G代理商,主营3G业务,并且将公司自有的业务与联通业务进行包装发布市场。
2011年初,IT部门只有我一名开发,以及一名系统维护人员。
我的工作是基于一套从上个东家带过来的业务系统,支撑公司所有的业务。系统有Delphi和C#.NET两个界面版本。一个供管理用,功能齐全;一套供营业厅使用,只有部分功能。
从2011年起,公司飞速扩张,快速在广东省几个地市建立子公司,业务迅速扩展,在IT层面的体现就是业务规则越来越复杂,业务变化越来越快,而很多业务的控制和计算都由IT实现,例如员工绩效计算,不同岗位,不同区域,不同营业厅类型,不同政策类型,不同3G套餐,不同机型,不同价位段……各种复杂的条件组合下有不同的值,而且这些条件随时会增加和修改。一开始是将这些规则记录在规则表中,发生业务时与业务数据匹配后进行计算,但随着规则越来越复杂,以及有类似复杂规则的项目越来越多,明显已经不是简单的规则表能解决问题的了,很快IT不堪负重,并且系统越来越丑陋,实在难以维护。于是启动懒人模式,开始着手设计一个以不变应万变的模块,并且交给业务部门自己维护,但愿这些业务上的事别再找IT。
基于以上背景,我的设计目标如下:
1、足够灵活,能应对各种复杂的业务规则。可以对各种业务状态进行复杂的组合判断,以设置复杂的规则。
2、足够简单,能交给业务部门直接维护,业务规则改变不再需要IT。
3、足够好的扩展性,可以快速应用到系统各个业务模块,并且最少改动现有代码。
在现有的开发模式下,只能使用T-SQL,不过幸好SQL SERVER支持CLR扩展,一些功能会使用到它。