企业逻辑和商业规则,怎样做在应用服务器上?(50分)

  • 主题发起人 主题发起人 yubo
  • 开始时间 开始时间
Y

yubo

Unregistered / Unconfirmed
GUEST, unregistred user!
企业逻辑和商业规则应作在,那一个控件的什么事件中?
如一个字段不能为空,我的现在做法是,在DataSetProvider.BeforeUpdateRecord中判断是否违反,违反从TField.ProviderFlags中去掉pfInUpdate
但我不知怎样让前台知道错误,并取消用户操作?
请个位大侠帮忙?
环境: Delphi5 + Oracle8.1.5(server) + Oracle8.0.5(Client)
 
最好让前台处理数据的输入规则,否则你不是浪费网络资源吗?
 
To: bluepeach
三层的优势不是企业逻辑和商业规则作在应用服务器上
瘦客户端,更新方便吗?
 
发生错误,在Tdatasetprovider的onupdateError或客户端应用程序的OnReconcilError中处理。
 
廋客户最好是客户端不需安装,维护和更新,但也不是什么也没有,
廋客户主要解决输入界面,这实际上在应用有很多变化的时候,也会变的,
所以什么都不是绝对的,有根据情况取舍,客户端应该有必要的输入检查。
 
To: bluepeach
那什么规则应该作在应用服务器上,违反后怎样让前台知道呢?
 
可不可以这样考虑,应用服务器给前台提供一个规则,前台根据应用服务器提供的
规则进行检查,这样,以后应用发生改变时只要改变服务器提供的规则就行乐。
这样,两方面都可以兼顾了。
 
那得做个规则解释器吧?更麻烦了
 
怎么没人回答我了,分太少了吗?坛主在吗,为我的问题加一百分好吗?
 
我在加一百分。
 
不是分太少,是太烦,解释不清楚,
而且说实话,清楚人的也不多
至少我也不太清楚的。
 
企业逻辑可用Rational ROSE来做分析,我的做法是将运算和大量查询写在AP端。
而且直接叫用StoreProc这样就不会浪费网络资源了,Client端撰写字段的键值是否正确。
 
listen!我也不清楚,只是觉得应该在客户端加的企业逻辑和商业规则很少,
因为客户端只需要处理一些操作、输入数据界面就行了,至于某值非空、某值为
N---M之间,或某值不能大于等等问题,最好自己做个触发器,不会很麻烦的,
用时只需要一个个调用即可,我还是建议用在客户端较好,应用服务器上应该是一
些关系的从库中查找到的应用规则。一点建议,望能引玉。
 
谢谢大家的回答.
我现在用三层作东西,感觉和两层差不多.
我的感觉三层像一个功能强大的缓冲更新.
因为,我现在的逻辑判断还是作在了客户端,
我的客户端可不是只是一个录入界面它很大、功能很强,
相反应用服务器功能较弱,我是不是做错了。
hhhhhhhh:
你说的触发器是什么,是过程,还是数据库的触发器?
 
越听越迷糊
两层还是三层好?
LISTEN!!!
 
我可以告诉你,第一种方法应该是:应用服务器从远程数据库服务器继承的规则,
可以由客户端继承;第二种方法是在应用服务器端创建永久性字段,并创建相应规则,
然后由客户端继承,有出错的的检测方法依据具体情况有所不同:相关的项目有
applyupdates中定义的所允许的的最大错误数(好像是记录数,不定义也有默认值);
如果在应用服务器端发生记录更新错误,将会在客户端触发onreconcilerror事件,这样
的话,你有机会进行核对和修改了吧!注:在onreconcilerror事件中存在一些特性,仔细
看看就明白了!第三种方法是你所说的在客户端创建规则,一般在特别需要在字段级时
才会用到。我所说的触发器就是在客户端创建的一些过程呀,大多属输入字符处理的过程,
用oneditexit类似的事件触发。
 
谢谢:hhhhhhhh的精彩回答.
你说的第一种是不是数据库的规则!
规则被违反,触发数据库异常返回前台。
第二种是,固定字段的约束
第三种和第二种类似只是在客户端。
这样有缺点数据库和DBE的异常不够具体,
我是指不能具体的翻译。比如:“总金额不能为空”
后台的规则我现在是作在TDataSetProvider.BeforeUpdateRecord()中,
通过控制TFields.ProviderFlags属性,更新或不更新数据。
规则违反,用raise Exception.Create('总金额不能为空');
扔出异常,但是前台OnReconcilError中有翻译的功能。
像这样的异常应直接显示给用户看,不用翻译,不知怎么判断。
 
to:yubo
对,我说的第一种规则是数据库规则。
“总金额不能为空”这类的规则最简单的办法还是做在客户端!
在中间层做此类规则,只能在未触发数据库异常之前,提交更新之后
进行处理,建议最好还是创建个新的永久性字段(有一点不明白,
在数据库中有类似"总金额"的字段吗?)。
对数据库出的处理方法可看一下DELPHI自带的出错处理demo,
在dephi5/demo/db/dberror下面,写得很棒的出错处理程序,
稍改一下可直接拿来用了。只是不知道你的客户能否看懂洋码?
否则只有你一句句拿过来翻译了。
 
后退
顶部