- 浏览: 908713 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (322)
- Hibernate研究&源码 (27)
- Server (10)
- Coder碎语 (64)
- EnglishMulling (11)
- About XML (1)
- persistence (12)
- Core Java & OO (23)
- Java EE (6)
- JavaScript/JSON/Ajax/ext... (22)
- 我的读书笔记 (16)
- Source Codes Study (29)
- workFlow/jBPM (22)
- OFBiz: Open For Business (1)
- 项目积累 (21)
- srcStudy_acegi (1)
- Cache/Ehcache... (9)
- Java Test/JUnit.. (7)
- maven/ant (2)
- 设计模式 (1)
- SOA/cxf/ws-security (2)
- Android (4)
- 云计算/Hadoop (2)
- 加密/签名 (1)
- 正则表达式 (1)
- htmlparser (1)
- 操作系统 (5)
- DB (1)
最新评论
-
天使建站:
这里这篇文章更详细 还有完整的实例演示:js跳出循环 ...
jQuery中each的break和continue -
heshifk:
刚刚我也遇到同样的问题,然后就在纠结为什么不能直接使用brea ...
jQuery中each的break和continue -
masuweng:
不错写的.
集万千宠爱于一身的SessionImpl:get研究(四): Hibernate源码研究碎得(8) -
muzi131313:
这个老是忘,做一下笔记还是挺好的
jQuery中each的break和continue -
lg068:
data = data.replace("\n&qu ...
项目小经验: eval与回车符
引言: 这些天项目中做了一个改动, 为了后续行文方便,我们给这个改动起个绰号,称之为"非典型改动". 围绕这个改动,我想了很多,
几乎贯穿了整个项目所用的技术. 现在我想整理下来,作为以后的一个参考, (不敢写"若对别人有所帮助我也甚感欣慰"这样的话了,
因为这些天写博客写的有些伤心, :-) ).
----------------------------------------
这是一个真实的故事.
事情是这样的. 项目中的一个类,对这个类中一属性的判断规则是在代码里写死的. 由于现在的判断标准很简单,它们都是在代码中写死的. 现在要改, 把判断标准改放到数据库里, 而且判断标准要复杂了些.
为了更形象地描述这个问题, 也为了后续博客中写的方便, 在这篇博客里在下用一个简单的模型来描述下.
假设有一个类, Student, 它的属性如下.
class
Student{
String id;
int age;
double score;
}
结合这个类把现在项目中的问题描述下. 我们知道,现在确定一个Student是否通过一个考试是看他的分数是否大于60, 现在判断标准改了, 它的规则如下:
如果 age > 20 && age < 21 && score > 65, --> "恭喜你, 过关了"
如果 age > 15 && age < 20 && score > 55, --> "恭喜你, 过关了"
............
也就是说判断的标准考虑到年龄因素了, 这样的组合有很多种, 于是判断组合是写在了数据库, 而且"老师"可以随时更改判断标准.
再回到项目中, 现在的问题是:
1, 项目中对一个Student是否通过考试的判断很多,也很散, 有在action中的, 也有在底层DAO实现的.
2, 项目中用的Hibernate怎么来描述判断标准.
这篇先到这里, 在下一篇中将写第一个问题引发的思考.
评论
规则引擎就是把逻辑判断的各种处理和算法,不在程序中实现,而采用规则包的形式在外面配置,然后通过一个引擎来解析他。
目前开源的规则引擎有很多,最有名的就是JBoss的Drools,但是这类规则引擎都有一个缺点。就是其基于的算法都是基于推理类的算法,是采用匹配的方式来执行的。
如果你要实现上面的逻辑,那你必须将数据库中的数据,先逐条放到对象中,然后将对象传递给规则执行。最后,你在将处理完之后的对象,放回到数据库中。其逻辑执行的轨迹是在运行时决定的,主要是其算法有点智能型的,因此你需要动些脑筋,好好分析的数据结构模型以及算法的逻辑性,以保证其执行轨迹是按照你设想的方式运行。另外你还要深入理解一下rete算法。
商用的用Ilog的JRules,以及Blaze的产品。但这些产品都比较贵。
国内公司也有做的,比如flagleader的VisualRules,这个公司的产品不是基于rete算法的,比较适合这类逻辑的开发,也可以参考试用一下。
另外一种方式,就是自己做一个语法解析器,做一个动态语言的解析功能。以前也有做过的方式,是采用Excel来实现这些逻辑的设置,然后解析Excel来运行。这也是一种方式。
看来这位是过来人。
偶们系统经历了 Bean Shell -> SP -> Drools的过程,ILOG实在太贵了
规则引擎就是把逻辑判断的各种处理和算法,不在程序中实现,而采用规则包的形式在外面配置,然后通过一个引擎来解析他。
目前开源的规则引擎有很多,最有名的就是JBoss的Drools,但是这类规则引擎都有一个缺点。就是其基于的算法都是基于推理类的算法,是采用匹配的方式来执行的。
如果你要实现上面的逻辑,那你必须将数据库中的数据,先逐条放到对象中,然后将对象传递给规则执行。最后,你在将处理完之后的对象,放回到数据库中。其逻辑执行的轨迹是在运行时决定的,主要是其算法有点智能型的,因此你需要动些脑筋,好好分析的数据结构模型以及算法的逻辑性,以保证其执行轨迹是按照你设想的方式运行。另外你还要深入理解一下rete算法。
商用的用Ilog的JRules,以及Blaze的产品。但这些产品都比较贵。
国内公司也有做的,比如flagleader的VisualRules,这个公司的产品不是基于rete算法的,比较适合这类逻辑的开发,也可以参考试用一下。
另外一种方式,就是自己做一个语法解析器,做一个动态语言的解析功能。以前也有做过的方式,是采用Excel来实现这些逻辑的设置,然后解析Excel来运行。这也是一种方式。
代码发布工作困难,常变动业务我们通常做成存储过程,当然你能做成配置的更好。
如果性能压力不大,BEAN SHELL会是一个很好的选择
rmn190 写道
结合这个类把现在项目中的问题描述下. 我们知道,现在确定一个Student是否通过一个考试是看他的分数是否大于60, 现在判断标准改了, 它的规则如下: 如果 age > 20 && age < 21 && score > 65, --> "恭喜你, 过关了"如果 age > 15 && age < 20 && score > 55, --> "恭喜你, 过关了"............也就是说判断的标准考虑到年龄因素了, 这样的组合有很多种, 于是判断组合是写在了数据库, 而且"老师"可以随时更改判断标准. 再回到项目中, 现在的问题是:1, 项目中对一个Student是否通过考试的判断很多,也很散, 有在action中的, 也有在底层DAO实现的. 2, 项目中用的Hibernate怎么来描述判断标准.
谁有这个职责?
在你的设计中,随便!谁爱用score谁就判断。实际上你言不由衷。既然你的设计中负责“判断标准”职责的对象根本不存在,“现在判断标准改了”是什么意思?谁把标准改了?你自己根本说不清楚改这个标准又是谁干的!
在你的设计思路中,纯粹是比较低级的数据库编程思路,还没有按照领域来建模,还没有体现职责归属于谁,连基本的类型设计都还没有掌握(更不要谈动态建模)。
谢谢mock1234的回答, 我这里稍微解释下, 这里的Student例子是用来说明项目中固有的一个问题.前段时间我的工作就是在业务逻辑变更后,在代码实现上做相应的修改.
很感谢mock1234所提到的设计上概念(尤其是"动态建模"这个概念),从这个问题中,我切身地体会到优良设计对一个项目成功或可扩展性方面所起的至关重要作用.
再次感谢!
这个包下的.
它可以把 好多 if 放到一起....
还可以组合.
能否说明下Predicate具体是指?
谢谢.
如果放在java中Predicate很好用....
发表评论
-
ant打jar包时, 怎么把所依赖的jar包与从源码中编译过来class文件合并成最终的一个jar?
2011-08-03 09:53 7933实验用例子的总体结构是这样的: ... -
List内容生成Excel文件的一个工具
2010-10-27 15:38 1356什么也不用说,直接上传代码,里面有个测试类,一看便 ... -
JSP中分情况下地set一个var
2010-10-22 15:49 1139做项目时,有些匆忙,没来得急细想,现在有些闲了,静下心来 ... -
同一个表记录某列值拷到对应列中
2010-09-29 17:52 1145我想在mysql数据库同一表中,把一条记录的值赋给另 ... -
Google docs不能上的解决办法
2010-09-28 11:28 1485自己大概有N个G的东西在Google docs上, 这些天它经 ... -
Maven管理项目切换到Eclipse环境bat脚本
2010-09-28 09:14 3302手头一个Maven管理的项目,默认情况下是用Idea开发 ... -
用jQuery来查找Option的text
2010-06-24 17:41 5144问题起引:页面中显示Table,它里面显示的是各分公司的统计数 ... -
style="display:block;"在FireFox中跳格问题
2010-06-04 11:17 2450用block时,跳格如下所示: ... -
好久没写JSP的后果
2009-04-24 08:31 1448有些日子没写JSP了, 今天干一个活时用JSP竟然出了不少错误 ... -
Java反编译: 最终用了JD.
2009-04-18 09:58 1746前些天帮一个朋友反编译一class文件, 第一时 ... -
jFreeChart收藏,大家就不必看了
2009-04-06 17:21 1263几点说明: 1, 例子来源: http://www.ite ... -
乱码(六): Linux下文件(夹)名乱码的解决
2009-03-31 08:27 4757问题见乱码(五): Linux下如何把乱码的文 ... -
乱码(五): Linux下如何把乱码的文件名转为正常?
2009-03-30 08:47 2652前面文件上传时的乱码问题告一段落了, 不过一个 ... -
乱码(四): 撬动地球的支点
2009-03-29 07:59 884写下这个标题 ... -
乱码(三): 问题的出发点
2009-03-28 09:38 1320在乱码(一): 北京西直门迷路与乱码困惑 里, 笔 ... -
乱码(二): Linux下/etc/sysconfig/i18n究竟是干什么用的?
2009-03-27 06:37 4290这些天解决乱码问题过程中,跟Linux下/etc/sysc ... -
乱码(一): 北京西直门迷路与乱码困惑
2009-03-25 08:18 1341在北京,如 ... -
小配下分布式事务管理
2009-03-03 17:18 1247由于项目要求, 需要配置下分布式事务管理.问题是这 ... -
项目所得:一个非典型性改动带来的思考(三) 之项目设计
2009-02-27 11:06 1097------------------------------- ... -
项目所得:一个非典型性改动带来的思考(二) 之对第一个问题的思考
2009-02-26 14:16 1176上篇 里以一个简化的例子把问题描述了下, 这里将当时引发的思考 ...
相关推荐
电力设备与新能源行业周报:燃煤发电上网电价机制改动对新能源发电影响有限.pdf
一个小改动一次大革命.docx
本资源提供了一个使用Python实现的区块链数据完整性验证项目源码,旨在帮助计算机相关专业的学生、老师和企业员工更好地理解区块链技术以及数据完整性验证的原理和实现方法 该项目采用了以下关键技术: 1. Python ...
本项目是一个基于Python实现的卷积神经网络(ResNet)图像分类系统,旨在帮助用户快速搭建和训练一个图像分类模型,并通过GUI界面进行交互 项目概述: 本项目采用了深度卷积神经网络(ResNet)作为主要的图像分类...
本项目旨在实现一个基于迁移学习的ResNet网络,用于对食物图像进行分类 在这个项目中,我们将使用迁移学习技术,利用预训练的ResNet网络来提取食物图像的特征,然后在此基础上进行分类。这种方法可以减少训练时间和...
基于上述原因,我写了一个脚本,它可以备份当前项目相对svn的改动内容。 这样每次挂起时,我只要执行一个命令就可以了,恢复时使用比较工具,也可以很快的恢复。 这个工具的功能点及优点: 1. 保留项目文件夹结构; ...
项目管理需要多方面的知识资源,理性的分析方式方法,使项目组...项目管理的一些标准体系,给我们提供了一个完整的思维框架,在实际项目管理过程中只要能够以这种系统化的思维方式考虑问题,就能减少很多问题的发生。
如果你需要查看工程最近都改了哪些文件,那么这款工具可能适合你,Try... (注意:需要Java运行环境)
Linux项目是一个开放源代码的操作系统项目,由林纳斯·托瓦兹(Linus Torvalds)于1991年首次发布。该项目以Linux内核为核心,围绕其构建了一个完整的操作系统,包括各种系统工具、库、应用程序和硬件支持。 以下是...
·第34.5节给出了对NP完全问题的一个有所扩展的综述,并新增了对哈密顿回路(hamiltonian-cycle)与子集和(subset-sum)问题的NP完全性的证明。 对书中的每一节,几乎都做了重新编辑,修正了说明和证明中的错误,使之...
基于C#实现的一个绘图解释器和一个图片代码生成器程序源码+项目说明(带GUI界面).zip 该资源内项目源码是个人的毕设,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到94.5分,放心下载使用! 该资源适合...
总之,本项目提供了一个基于SSRNetV2的杂草识别系统,具有较高的识别精度和实用性,可为相关领域的研究和应用提供有力支持。在满足基本功能的基础上,用户可以根据需求对模型进行改进和优化,实现更多高级功能。
中国联通深度研究报告:5G红利叠加混改动能刺激联通迎来拐点.rar
0218金融项目改动点整理.pptx
[027]VC 通讯程序 用于串口通讯 稍加改动就可以用于工程项目.zip上位机开发VC串口学习资料源码下载[027]VC 通讯程序 用于串口通讯 稍加改动就可以用于工程项目.zip上位机开发VC串口学习资料源码下载[027]VC 通讯程序...
本项目是一个基于TensorFlow和ResNet残差神经网络实现的白细胞图片分类系统 在这个项目中,我们使用了以下技术和方法: 1. TensorFlow:TensorFlow是一个开源的机器学习框架,用于开发和部署机器学习模型。我们...
1. **Paddle框架**:PaddlePaddle(飞桨)是一个由百度开发的深度学习框架,支持多种深度学习模型的训练和部署。在本项目中,我们使用Paddle框架进行蝴蝶种类识别和分类任务。 2. **ResNet残差网络**:ResNet是一种...
TSP 问题是一个组合优化问题。该问题可以被证明具有 NPC 计算复杂 性。因此,任何能使该问题的求解得以简化的方法,都将受到高度的评价和关注。 ### 遗传算法 遗传算法的基本思想正是基于模仿生物界遗传学的遗传...
实现优先级请由变更控制委员会赋予的每个变更的相对重要性,例如低、中、高 修改者请实现变更的主要负责人姓名 建议者请提交变更请求的人名,也可以存储与此人相关的信息 建议者设置的优先级请建议者赋予每个变更的...
过程式知识表示是将有关某一问题领域的知识, 连同如何使用这些知识的方法,均隐式的表达为 一个求解问题的过程,每个过程是一段程序,完成对具体情况的处理。过程式不像陈述式那样具有固定的形式,如何描述知识完全...