业务逻辑层的设计(四)——表模块模式简介
来源:互联网 发布:会计课程 知乎 编辑:程序博客网 时间: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>
- 业务逻辑层的设计(四)——表模块模式简介
- 业务逻辑层的模式
- 基于命令模式的业务逻辑层设计
- hjr学习-设计模式:业务逻辑层
- 业务逻辑层的设计(三)——事务的考虑
- 什么是业务逻辑层(业务层)及业务逻辑层(业务层)的功能
- J2EE DAO层和业务逻辑层的设计
- 业务逻辑层接口设计
- 基于Spring4+Hibernate4的通用数据访问层+业务逻辑层(Dao层+Service层)设计与实现!
- 设计模式解析(四)——设计模式简介
- 新闻发布项目——业务逻辑层(UserService)
- 新闻发布项目——业务逻辑层(newsTbService)
- 新闻发布项目——业务逻辑层(commentService)
- 新闻发布项目——业务逻辑层(categoryTBService)
- 新闻发布项目——业务逻辑层(UserServiceImpl)
- 新闻发布项目——业务逻辑层(newsTbServiceImpl)
- 新闻发布项目——业务逻辑层(categoryTBServiceImpl)
- 新闻发布项目——业务逻辑层(commentServiceImpl)
- linux基础命令(2)
- 将字符串str1复制为字符串str2的三种方法
- UVA 408 Uniform Generator
- Java总结(15) 加强for 装箱
- 浅谈java异常
- 业务逻辑层的设计(四)——表模块模式简介
- 数海笔记(3)-极座标
- C# FTP操作类
- 关于缩点
- C#垃圾回收Finalize 和Dispose的理解
- Citrus Engine关于创建Tiled Map游戏的小窍门
- metasploit之db_autopwn
- Android 面试知识集2
- c# 网页采集类 (方法)