业务逻辑层的设计(四)——表模块模式简介

来源:互联网 发布:会计课程 知乎 编辑:程序博客网 时间:2024/05/18 11:15

其实我觉得写博文也可以跟写小说一样,有连载,只要读得顺畅就好,我并不想通过几篇博文读下来,就让读者成为某个方面的专家。

在每写一篇短短的博文,都曾参考过很多有价值的书籍和其他人的博文,所以不可能把所有的东西都写进来的。

我最近在思考的时候,经常茶不思饭不想,不知道的人看来,以为我会是得了相思病的少年。

 

上集回顾

在上几篇业务层的设计都描述的是领域模型的模式,为了解释领域模型的使用,我居然提前写了一点数据访问层。

领域模型适合业务逻辑比较复杂,业务规则繁多,因为这些复杂的元素都会被内聚在领域模型之中,而领域模型又可以被重用。

这样一来就能避免许多业务逻辑的重复分布在各个地方,对维护带来说,这是非常有爱的。

但是在需求和设计阶段,需要花费很多时间,但是你会发现领域模型重用了几次之后,就会体会到它的好处。

初学者不要轻易尝试,尤其是半路出家的程序员。

 

所以接下来打算介绍一些比较简单的模式,表模块模式和事务脚本模式。

我会对表模块做一个比较简单的描述,就是比较简单,因为我不是很喜欢它。

相对而言,实践中事务脚本我用的还算比较有心得,打算在后续的博文中慢慢介绍。

 

表模块(Table Module)

先来宏观地看一下操作流程:

通过创建一个DataSet数据集,添加一个表,轻松构建一个强类型的DataSet

可以为它添加一个查询

非常轻松,VS将自动生成查询SQL,但是SQL语句无法太复杂,不能超出VS的识别范围。

调用方法:

可以看到它返回的是一个强类型的DataTable,使用起来非常方便,但是当你实战中用的时候,会发现问题的,比如你有一个备注字段是Null,试试看吧,至少在.NET2.0中就悲剧了。

 

表数据网关模式:

用代码直观地表示:

在数据网关中执行SQL命令返回想要的数据集,然后在业务类中处理,得到想要的结果。

业务类

    PPDataSet.PP_VIRTUALSENDCONTROLDataTable _table=null;    public VirtualSendControlManager() { }    public VirtualSendControlManager(PPDataSet.PP_VIRTUALSENDCONTROLDataTable table)    {        _table = table;    }    public PPDataSet.PP_VIRTUALSENDCONTROLRow GetRow(int index)    {        if (_table.Rows.Count == 0)        {            return null;        }        return _table.Rows[index] as PPDataSet.PP_VIRTUALSENDCONTROLRow;    }


小结:

VS生成的强类型的DataTable给我们带来很多便利,它可以是某个表,也可以是视图。

只不过使用中它还是会有一些问题的,比如之前提到的null的问题,不知道是不是一个bug。

如果不使用VS生成的强类型数据集,那么表模块就失去了自己的优势,尤其是业务对象和数据库表结构差异较大的情况下。

如果要实现自定义的强类型数据集,可以参考微软的源码,然后自行设计,不过工作量受不了啊。

表模块模式是一个搞毕业设计的利器(邪恶的想法)。


<script type="text/javascript"><!--google_ad_client = "ca-pub-1944176156128447";/* cnblogs 首页横幅 */google_ad_slot = "5419468456";google_ad_width = 728;google_ad_height = 90;//--></script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
原创粉丝点击