针对SQL Server中业务规则链接的分析(2)
作者:Tim Chapman 发布时间:2009-01-20 11:43:00
接下来就是处理业务规则的代码了。在清单D中,我用一个指针在表格中迭代,该表格中的记录都保存着元数据。当可以用一种不同的循环结构来完成同一个逻辑时,用指针要简单一些。不管是怎么样完成的,都需要用某种类型的迭代循环和执行所需要的业务程序。运行这个代码将执行每一个文章前面所定义的四个存储过程。
DECLARE @LogicProcedure VARCHAR(255)
DECLARE @RunSequence TINYINT
DECLARE LogicCursor CURSOR
FOR
SELECT LogicProcedure, RunSequence FROM BusinessLogic
WHERE
ProcessType = 'CustomerOrders' AND
BusinessLogicActive = 1
ORDER BY RunSequence ASC
OPEN LogicCursor
FETCH NEXT FROM LogicCursor
INTO @LogicProcedure, @RunSequence
WHILE @@FETCH_STATUS = 0
BEGIN
EXECUTE @LogicProcedure --//Call procedure stored in variable
@RunSequence = @RunSequence --//Pass in parameter
PRINT '-----------------------------'
FETCH NEXT FROM LogicCursor
INTO @LogicProcedure, @RunSequence
END
CLOSE LogicCursor
DEALLOCATE LogicCursor
GO
清单D
在清单D中,有两个主要引人注意的地方。第一个就是用来从表格中检索记录的select语句,所检索的记录中包含了处理业务规则的信息。从这个简单的查询中,我可以为任何类型的业务处理从BusinessLogic表中返回行。我还能保证规则是活动的,并且按照它们需要执行的顺序返回。
第二个就是执行业务规则的方式。当指针迭代时,它从BusinessLogic表中检索将要被执行的存储过程的名称,然后将其储存在一个逻辑变量中。EXECUTE命令允许用户执行存储过程,即使该存储过程的名称被储存在一个变量中。在这种方式下,调用存储过程还使得我能够向存储过程中输入所需的参数。
这使我回到了先前关于业务程序具有相同数量的输入参数这一点。我能够以一种相当动态的方式运行业务程序,这取决于在程序运行时BusinessLogic表中储存了什么。但是,现在我还没有一种方法可以动态地向业务程序输入参数。
一种简单的解决办法就是保证所有的业务程序接受相同数量的参数,不管用不用它们。这种技术保证我们始终为业务程序提供所需的参数。也有其他的方法可以实现这些所需参数的输入,但是那些不是这篇文章所要讨论的。
扼要重述
如果您的应用程序在数据库中储存它的任何一个或全部业务逻辑,那么有可能它就是被我称作业务规则链接的一个候选者。这种方法允许存储过程在数据库中依次运行,并且让您能够在需要的时候打开或终止这些业务规则。使用这种方法的一些潜在缺陷包括数据安全(执行业务程序的数据储存在一个表格中),和向业务逻辑程序输入参数的非动态性。如果您觉得对于您的业务问题来说,这种方法利大于弊的话,我鼓励您尝试一下这种方法。
猜你喜欢
- IE 一如既往地带来问题。真的,我觉得 IE 坚持自己的一套无所谓,不支持或者不完全支持标准也无所谓。但是,IE6 IE7 IE8 这三个版
- 我对定格动画非常喜爱,也曾经在大学毕业时期制作过一部个人定格动画MV.恰当给CDC博客写文之机,给大家介绍下定格动画,分享下这门独特的拍摄艺
- 印象中最早看老外个人网站就挺纳闷,怎么人家都没有www,这样也可以?经过不断尝试,我发现确实不录入www要快捷的多,但不清楚怎么能做到。几年
- 如何在页面中快捷地添加翻页按钮? 先编写一个nextprev.inc文件,再将代码<
- 最近要做数据库同步,如果网上找了例子,成功,记录下来,下回再看。这个是网上找的一编文章。以下配置在本机上已经成功:实现功能:A为主服务器,B
- 下面代码的功能是为了管理任务的,大家项目中有需要用到的,尽管拿去吧。 这个东西用于可以管理任务比如:今天我要做什么,做了没有,做了就打钩。&
- 可能各位朋友看到这个标题很不解,到底什么是习惯化,什么又是去习惯化?下面我来慢慢介绍我的个人理论。习惯化:随着对刺激的熟悉,人们越来越注意不
- 背景:在做项目时,经常会遇到这样的表结构在主表的中有一列保存的是用逗号隔开ID。如,当一个员工从属多个部门时、当一个项目从属多个城市时、当一
- <html> <head> <title>获取ACCESS数据库表名 -&
- 很多网站需要将好的会员号留着,或用于日后的盈利。实现方法不是本文讨论范围,本文仅列出用于检测靓号类型的一些正则。靓号检测:主要可以检测连号(
- 当然这应该属于正常过滤手法,而还有一种过滤HTML标签的最终极手法,则是将一对尖括号及尖括号中的所有字符均替换不显示,该方法对于内容中必须描
- 操作实现函数: 代码如下:Function AddWater(n) Set Photo = 
- 好了,看看我们的代码吧:upload.htm' 上传页面<html> <body>&nb
- jQuery 真是一个非常伟大的 javascript library,至少在我不会写 JS 的时候第一时间接触了它,虽然还有其他很多优秀的
- 在HTML中,我们设置border=”1″ 时,表格边框实际大小是2px,那如果我们要做成1px的细线表格要怎么办?以前在做1px的表格的时
- 鉴于人手严重不足(当时算两个半人的资源),打消了逐个库手动去改的念头。当前的程序结构不允许搞革命的做法,只能搞搞改良,所以准备搞个自动化工具
- 支付宝lab的意思是支付宝实验室,也就是概念产品聚集地,可以让用户快速试用这些新产品。本次支付宝lab logo设计历时一个星期,视觉设计组
- 下面是虚机维护中,经常碰到的一些ASP程序中的数据库调用的错误,现收集整理如下:
- 【先锋缓存类】Ver2004作者:孙立宇、apollosun、ezhonghua官方网站:http://www.lkstar.com 技术支
- /*Bresenham画圆算法*/var arc = function(x0,y0,r){/*起点坐标x0,y