技术开发 频道

实战项目分析

6. 自定义事务

    .Net framework 2.0中内置了对事务的支持,不但可以管理进程内的事务(包括SQLServer事务),还可以自动提升至MSDTC来管理分布式事务(包括WCF事务)。所以我们无需再编写任何事物的管理代码。

    本系统中使用了Enterprise Library中的Data Access Application Block作为数据存取方案。但却没有很好地利用.Net framework 2.0的事务功能,而是自己写了很多管理事务的代码。例如使用一个TransactionContext类管理事务的执行,在很多数据存取的方法上支持传入TransactionContext类型的参数,用来管理事务边界。

    这样不仅需要花费精力维护TransactionContext类,管理事务的执行,也使数据存取接口变的很复杂,臃肿。

    其实我们完全可以利用TransactionScope这一.Net framework2.0中的事务处理类还管理事务。最简单的方式是:

Using(TransactionScope cpe = new TranscationScope())

{

           数据操作方法1();

           数据操作方法2();

           …

           数据操作方法N();

}

    这样就可以自动提交和回滚事务了,而且可以根据实际情况,如果其中某个方法调用了分布式事务的话,可以自动升级为MSDTC事务。

    关于如何使用.Net framework2.0中的事务功能,可以参考:Introducing System.Transactions in the .NET Framework 2.0。

7. 其它问题

    还有一些其它的小问题,虽然不涉及到系统架构,但也会带来一些负面的影响,包括:

    A.代码重复

    a) 很多数据查询方法功能相同,只是返回的数据“格式” 不同(有的返回DataSet,有的返回DataRow,有的返回实体对象),为了调用方便,做了很多重载的方法,但没有考虑代码重复利用,造成大量的代码冗余。

    B.公共模块

    a) 设计者把系统中使用到的公共代码和枚举等等组织在一起,放在一个文件中,为各个项目所使用。其实这本来很好,但是我却发现,公共模块同时被三个层次引用,这样也是很不好的。这样会使得系统的分层结构遭到破坏,公共模块难于理解和使用。应该把属于各层专属使用的功能集成到各自的层中,每个层中设一个公共模块,这样既保障了分层的清晰,同时又很好地规划了公共模块。

0
相关文章