日期:2014-05-20  浏览次数:20871 次

关于.NET中业务层的设计。用事件解藕后如何实现事务
我现在想把业务层所有原子步骤都用事件来解藕。客户端去注册事件。

但我现在有个问题没有解决。。如果我用了事件,如何来实现这些原子操作步骤的一致性,就是说事务如何来实现。

比如:产生一个订单后再直接产生应收款单。

系统中的实现:订单管理类产生一个单,激活自己的created事件(created事件绑定至应收款管理类里的创建应收单方法)。


这种方式我该如何去实现事务呢。

------解决方案--------------------
可以使用System.Transactions下面的类完成功能

请参考
http://www.cnblogs.com/ltp/archive/2009/06/17/1505319.html
------解决方案--------------------
事件中是有一个触发它的对象,这个对象才创建数据库事务,而其它监听它的程序则根本不知道该往哪里读写数据,只能从事件参数(类型为你自己定义的一种 EventArguments 子类型)中获得数据库事务参数然后才读写这个事务对象。
------解决方案--------------------
数据库事务使用System.Transactions
事件发生的类就是在这个类中触发了一个事件,但这个类并不知道哪个个对象或方法将会加收到并处理它触发的事件。所需要的是在发送方和接收方之间存在一个媒介,通过委托实现

------解决方案--------------------
学习了
------解决方案--------------------
探讨
这样的设计也有一定的问题。。

事务的提交时很不好。

比如我之前的业务是3个步骤完成。那么就是第3步的时候提交事务;如果后来业务发展,需要4个步骤,那么我还得去改提交事务的地方。。

有什么好办法吗?

是不是可以考虑用建造者模式。

------解决方案--------------------
探讨
我想在业务层的基类中增加一个protected 的IDbTransaction。。


这样怎么样。

------解决方案--------------------
我是一个应收款处理程序,你是一个订单程序,你在触发我监听的事件时告诉我你所用的数据库环境,我就往你的环境里写数据。

我不管第三者指手画脚告诉我该往什么其它“基类、全局”的数据库环境(陷阱)去操作,我只要这个协议,因为它在架构千变万化时肯定用得最久。
------解决方案--------------------
http://www.china56zx.com