zoukankan      html  css  js  c++  java
  • 表模块模式简介

    表模块模式简介

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

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

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

    上集回顾

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

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

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

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

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

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

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

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

    表模块(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生成的强类型数据集,那么表模块就失去了自己的优势,尤其是业务对象和数据库表结构差异较大的情况下。

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

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

     
     
    分类: 架构设计
  • 相关阅读:
    Study Plan The TwentySecond Day
    Study Plan The Nineteenth Day
    Study Plan The TwentySeventh Day
    Study Plan The Twentieth Day
    Study Plan The TwentyFirst Day
    python实现进程的三种方式及其区别
    yum makecache
    JSONPath 表达式的使用
    oracle执行cmd的实现方法
    php daodb插入、更新与删除数据
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/3216559.html
Copyright © 2011-2022 走看看