面向对象编程怎么解决事务处理有关问题
发布时间:2011-06-23 20:39:03 文章来源:www.iduyao.cn 采编人员:星星草
面向对象编程如何解决事务处理问题
使用面向对象编程,有些业务是需要以事务方式进行处理的
比如销售出库,需要对数据库进行:
1.保存出库单
2.生成财务凭证
3.冲减库存
简单伪码:
出库单的保存方法
Save()
{
保存出库单;
生成财务凭证类实例,调用财务凭证类的保存方法保存财务凭证
生成物资类实例,调用物质类实例冲减库存方法冲减库存
}
业务层原则上不直接操作数据库,是通过调用类提供的方法来实现,但需要保证操作的原子性,请教大家有没有好的方法,在不破坏面向对象设计原则的基础上保证事务操作的原子性
------解决方案--------------------
将后台业务逻辑写到SP, 不能处理的在代码内用Transaction.
如果数据量大请做好思路准备,因为很容易“搞死”服务器。
我用Delphi写过一段生成“批卡”的功能,大概300条记录涉及4张表吧,经常跑死服务器,死锁啊!
保存的时候超慢,后来优化了代码,将某部分业务脱离事务,问题解决速度且快了2倍。
事务只适合处理少量数据,是不是SQL天生这么弱?
------解决方案--------------------
另外:批卡表的记录在300W以上。所以慢。。。
------解决方案--------------------
1. AOP框架, 实现事务的切入。 比如postsharp、unity、spring.net等等。推荐这种。
2. 使用MSDTC,分布式服务。 适用于分布式事务(跨数据库),性能稍差,不如dbtransaction稳定。
3. 传递dbTransaction对象, 这样代码可读性较差。
------解决方案--------------------
在不破坏面向对象设计原则的基础上保证事务操作的原子性
-------------------------------------
这确实是个难题。。。但如果你的系统到处都是这样的矛盾,冲突很大的话,会不会是设计过度了?
象你说的保存出库单的方法里,那些1.2.3一步步的操作,把它们单独提出来有意义吗??
------解决方案--------------------
通过合理的设计避免多步操作
1.事实上,客户并不希望由于财务凭证过账失败,导致出库单回滚;
过账失败的单据应该由代理程序自动重试,
重试失败的,放进代办事宜,由人工干预,
其实这时候,往往是已经有异常情况发生了,静默回滚是不合适的;
2.根据原始资料计算库存,放一个库存字段本身就已经违反会计原则了
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。
其他相似内容:
-
(VS2005)VB有关继承封装在DLL里窗体
公司里有一套自己的架构并把它封装在叫MFW的DLL里,再学习使用时发现了很多不明白的地方。例如:现...
-
如何让treeview点击结点不刷新页面?
如何让treeview点击结点不刷新页面?
------解决方案--------------------
帮你顶
------解决...
-
单薄的业务层
相信开发WEB信息的人都用到过三层架构
表示层--》业务层--》数据访问层
以前一直开发CS结构最近一年一直在开发...
-
类爆炸问题,对维护也是恶梦?
原意在ERP项目中有设计一个工序类用來描述工序:
public Process
{
public string ProcessNo
{
...
-
怎么实现随意变换网页字体?
想做个艺术签名的网站
字体也找了几个
就是在用户输入“名字”后
把“名字”转换成几个字体显示出来
...
-
关于政府部门网站数据库设计
今天上面安排让我做个政府有关部门的网站,我看了下不是很复杂。可到了设计数据库表时候碰到了些问题...
-
如何自动为录入的人员信息分配用户权限
我这里有两类人,一类是教师,一类是学生,要解决的问题是,在用管理员身份录入教师和学生信息时,...
-
Ext.Net 和ExtJS
现在在做一个项目,用到了EXT.NET 但是有个缺点就是EXT.NET里的时间选择器dateField不能选择时分秒,现在想到用EXTJ...
-
谁手里有现成的提示框样式啊,急用
谁手里有现成的提示框样式或者皮肤啊 还有弹出div层的好看一点的样式 给我个呗 我这急用呢 ...
-
求两个样式的例子...
一个是点击修改弹出修改表单表格 出现在列表上 要特别好看的那种 最好是悬浮的
一个 要弹出的确...