EaBIM一直以来积极响应国家“十二五”推进建筑业信息化的号召,对建筑领域的信息技术开展深入技术交流和探讨!致力于打造“BIM-建筑师-生态技术”三位一体综合资源交流共享平台,希望为BIM与可持续设计理念及技术的普及做出微小的贡献!!!

EaBIM

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
查看: 1115|回复: 27
打印 上一主题 下一主题

[数据库程序设计] Table Module

[复制链接]

1514

主题

7465

帖子

1万

积分

admin

Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10

积分
12404

社区QQ达人

跳转到指定楼层
F
发表于 2014-1-9 15:27:29 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
最近网上看到这样的帖子<<谁能告诉我Hibernate有何优秀之处>> 作者给出了对hibernate在实现orm的诸多不满和怀疑。而且很多开发人员都有着这样疑问,“怎么这个流行东东,我用起来就是不顺手呢?,“或许这个东东只是用来吹牛的”。然而,这或许很可能是因为,你习惯的架构模式开发策略并不适合使用orm这种持久化模式。用了反而是加大复杂度降低性能和效率。比如,用惯了resultset,喜欢把resultset放在表示层作为展示的数据结构的人。这样的开发人员因为习惯了二维表为核心进行开发,对于Hibernate这样的orm工具根本就没办法了解其优势了。但是这并不是说这种以二维表的架构模式就比较差了,只是不同的模式有不同的优缺点就看所在的应用是否适合使用了。或许你就一直在使用这样的模式在开发应用,自己还没有意识到(甚至一直以为这样的方式可以适应任何应用,:-)。反而被其他架构模式中才会用到的框架搞的晕头转向甚至被误导。事实上,像前面提到的以二维表为核心的架构被称之为表模块架构(设计)模式。

何为“表模块”(table module)?“处理某一个数据库表、视图或虚拟表中所有行为的业务逻辑组成的一个实例”。最初,我就是从马丁同学的POEAA中得到的这个定义。在书中他被定义在DomainLogic 层次或者该层次的一部分,DomainLogic也就是其他架构模型中的BizLogic层。与该模式相对应个还有完成相似功能的DomainModel以及TransactionScript模式。该层次的职责是专门处理业务逻辑。

简单的讲,所谓“表模块”就是以一个类对应数据库中一个表(视图)的数据来组织业务逻辑。从设计层次表妙面上看这种结构很像经典OO模型,同样是以不同对象对应不同逻辑。但是,它与领域建模不同之处在于,它的对象并不表示一个问题领域对象在软件系统中的映射。而是表示对一组数据的处理逻辑,而通常这组数据的结构是重数据库表或试图上的二维数据结构。当然也可以来自其他集成部分,比如返回两位数据结构的webservice

这里给出个比较形象的例子:

                               
登录/注册后可看大图


(上图)感觉像比较标准的OO吧,好象一个Contract的对象表示合同,而Product表示产品,还有他们之间的关联关系。但是其实现实给出几个方法的时候就看出区别了。Product内部的数据其实就是一个两位结构的rowset。而不像真正的领域模型分析出来的表示一个Product的数据,Contract也是如此。

                               
登录/注册后可看大图


你会发现tableModule的类中一个对象其实对应一个表的数据,其拥有的操作也有很多是多数据记录的。多数据记录的操作在真正的领域中往往应该放在类似Manager这样的实体中,而不是业务实体本身。

使用这种模式实现的业务逻辑层不像领域模型模式可以适应搞复杂度的逻辑。但是由于它更亲近于数据持久的二维表,没有像领域模型那样需要复杂的ORM支持。书对于数据驱动的应用或模块非常适合。POEAA中也已经给出了这种bizLogic最有效的持久层实现,就是table getway,当然也可以使用其他的方式比如“查询工厂”。

事实上,最多使用这种模式的情况是当后台数据源大部分都是一种两维甚至多维数据结构的时候进行。比如一个极端的例子(几乎没有业务),一个应用的复杂查询模块,这种模块就是一个查询模型加上一组对数据进行排列统计过滤的TableModule
      

                               
登录/注册后可看大图


表模块还具有很多特点:处理的二维数据表将成为代码的核心部分。所以,是否使用tableModule还会取决于整个应用的其他部分是否对这种二维表提供强大的支持。(如上图)

优点:持久层架构简单,在复杂度大的以数据为核心的应用中开发效率极高。而且表模块能够识别的table越多,能够处理table的组建工具越强,这种模型的能力越强。

缺点:不能适应复杂的应用逻辑,或者与表结构差别较大的应用逻辑。由于没有对内部的两位数据表(table)进行有效标识的方式(比如,无法快速简单的确定使用table是否是需要的数据内容),对于大量细颗粒的逻辑会增加其复杂度。

其实java中的 rowset/jdbc resultset.net中的 dateSet/dataTable都属于表模块操作的二维表。但是,由于.netGUI层面以及持久化层面对他自己的二维表的强大支持使得 TableModule几乎成为MS.Net上的首选模式。这也就可以解释了,许多.net开发人员一直抱怨,看到dataset/dataTable泛滥,甚至在WebService中也是这样。而java中却有所不同,虽然有持久化用到的jdbc/resultSet的支持(事实上jdbc/ado 给出的接口都只直接适合TableModule。),然而其他方面就少得可怜了。所以,使用java还是以其他的bizLogic架构模式为好。除非你的逻辑真的很简单,简单到把resultSet放在jsp中都不会造成逻辑混乱。又或者你能够自己提供一套完整的 rowset组建框架。

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 转播转播 分享分享 分享淘帖 支持支持 反对反对
工作时间:工作日的9:00-12:00/13:30-18:00,节假日不在线,请勿留言

1

主题

716

帖子

1133

积分

BIM项目负责人

Rank: 5Rank: 5Rank: 5Rank: 5Rank: 5

积分
1133
推荐
发表于 2014-5-13 11:08:34 | 只看该作者
本帖最后由 Aaronyee 于 2015-11-2 19:07 编辑

(*^__^*) 嘻嘻…… SO娱乐城:真_人.足球.彩票齐全| 开户送10元.首存送58元.手机可投k注任何游戏顶级信用k提现即时到账SO.CC

1

主题

842

帖子

1254

积分

BIM经理

Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6

积分
1254
推荐
发表于 2014-3-10 11:56:40 | 只看该作者
本帖最后由 Aaronyee 于 2015-11-2 19:07 编辑

(*^__^*) 嘻嘻…… 威尼斯人:wns185.com首存赠送58元y足球y真_人y各类彩票齐全y提现即时到账

6

主题

908

帖子

1312

积分

BIM经理

Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6

积分
1312
推荐
发表于 2014-3-12 15:16:53 | 只看该作者
路过!!! 不发表意见……

4

主题

723

帖子

1173

积分

BIM项目负责人

Rank: 5Rank: 5Rank: 5Rank: 5Rank: 5

积分
1173
19F
发表于 2014-5-8 10:01:10 | 只看该作者
顶......
楼下跟上.....

11

主题

892

帖子

1455

积分

BIM经理

Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6

积分
1455
16F
发表于 2014-4-10 15:58:37 | 只看该作者
路过!!!
不发表意见……

6

主题

853

帖子

1347

积分

BIM经理

Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6

积分
1347
12F
发表于 2014-3-31 16:55:24 | 只看该作者
路过!!!
不发表意见……

4

主题

852

帖子

1381

积分

BIM经理

Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6

积分
1381
11F
发表于 2014-3-28 10:16:11 | 只看该作者
(*^__^*) 嘻嘻……
*滑块验证:
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|EaBIM网 ( 苏ICP备2020058923号-1  苏公网安备32011502011255号

GMT+8, 2024-11-23 17:17

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表