`
ljh2008
  • 浏览: 47186 次
  • 性别: Icon_minigender_2
  • 来自: 成都
社区版块
存档分类
最新评论
阅读更多

请大家访问我的独立博客http://yanyaner.com/

 

你也许听说过现在的web项目开发,在业务层几乎都是采用事务脚本来组织、暴露业务逻辑,那么,大家为什么都喜欢这么做呢?下面说说我的一些肤浅认识。

有 人说所有的管理类型项目归根结底都是CRUD操作,仔细想想也确实如此,但再深入思考一下,既然是数据库的CRUD操作来实现业务,那么一定会出现数据库 事务,由于大多数业务操作并不是由一两条简单的sql操作完成,一次业务操作中的N多条sql操作应该是一个元子性操作,要么全部成功,要么失败,这样才 是一个完整的业务。何谓事务脚本(应该是MF先提出来的,大家可以去看看企业应用架构模式一书中相关章节),事务指的是完成一次业务操作的数据库事务,脚 本指的是数据库sql脚本,也就是以过程化的方式实现业务逻辑,并完成业务状态数据的持久化(图懒得去画了,顺手截了张pojo in action 中的事务脚本示例图)。

 

 

 

 

 

 

 

 

 

 

我 们可以看到,上图中域对象的行为已经没有了,所有的行为抽取出来放到了业务层中,用一个一个的事务脚本方法来实现业务逻辑封装,在实现过程中一般采用过程 化的实现代码;领域对象中的行为抽取出来后,域对象中就仅剩下状态信息,成为了所谓的哑数据对象(失血对象,这样的对象比较安全,可以各层间通传)。很多 刚学完OO思想的人就会有疑问,不是提倡面向对象的方式来开发,而在事务脚本模式中怎么又使用过程式的方式来实现业务逻辑呢?原因如下:

a、由于原来的领域对象中没有了对象职责,这样就避免了为正确分配职责而苦恼的过程(你是否还记得OOAD中为了正确分配职责而画的时序图),使得设计过程变得简单。

b、事务脚本对象一般以用例或模块从逻辑上来确定粒度,而事务脚本方法将直接依据界面原型进行设计,是个人都会做这件事(老大说的哈),设计难度降低,设计过程简单(几种常见界面原型的事务脚本方式设计我会在其它文章中单独讲解)。

c、减少了领域对象之间的职责交互,使系统变得简单,调用者只和业务层对象交互就可实现界面逻辑(这点应该是符合迪米特法则的,和门面模式有共通之处)。

正是由于这些原因,使得系统开发对从业人员的门槛大大降低,也就间接降低了项目开发的风险,项目后期的可维护性也得到了一定的增强,这也就是你所看到了现状:95%以上的web项目开发采用事务脚本模式的原因。

最后说一点,任何事物都有两面性,以事务脚本方式实现业务逻辑也有显示的不足之处,那就是实现复杂的业务逻辑会使代码的可读性降低,不利于后期维护,当然,我们可以采用合理抽取子方法或采用贫血领域对象的方式来降低事务脚本带来的负面影响。

事务脚本在项目实现中,我们一般会用采用AOP方式,把事务管理代码动态注入到业务方法的前后,使得程序员把主要精力用在核心业务逻辑实现上,这样就会提高项目的开发效率,这也是我认为spring最有用处的一个地方之一。

 

 

pojo in action有事务脚本的代码实例与讲解,这本书的第二章也进行了全面的总结,这一章节是这本书的精华所在,建议有兴趣的去读一下,以前csdn上有这个 章节的试读版,很可惜现在已经找不到了,这本书值得初、中级水平者买一本仔细阅读,书中的代码实例有利于理解一些抽象的架构概念。

本文首发http://yanyaner.com/【刘江华的博客】,转载请保留。

分享到:
评论

相关推荐

    浅谈ADO.NET数据库脚本

    在本文中,作者分享了自己在使用***进行数据库操作的一些经验,重点介绍了如何利用数据库脚本来创建数据库、数据表以及如何通过***将数据插入到数据库中。作者强调了在编写脚本时对大小写敏感的问题,并且分享了自己...

    浅谈SQL数据库备份.pdf

    "浅谈SQL数据库备份.pdf" 本文将对SQL Server数据库备份进行详细介绍,包括根据数据库向导备份数据库、脚本备份数据库、通过数据库代 理服务器自动备份数据库及通过导出数据库结构和数据脚本备份数据库四种方法。 ...

    浅谈SQL Server数据库备份的实现.pdf

    它还具备强壮的事务处理功能,支持对称多处理器结构、存储过程、SQL语言,这些特性保证了数据的完整性。 在SQL Server数据库的备份类型方面,常用的备份方法包括完全备份、差异备份、事务日志备份和文件或文件组...

    浅谈Android面向切面编程(AOP)

    在Android开发中,AOP常用来处理横切关注点,如日志记录、性能监控、事务管理等,这些关注点往往分散在多个类和方法中。AOP通过将这些通用逻辑集中到一个独立的部分——切面,来降低代码间的耦合。 1. AOP概念: ...

    浅谈SQL Server中的安全策略.pdf

    数据库故障可以分为事务故障、系统故障和介质故障。在这些故障发生时,数据库管理员必须从数据备份中尽快恢复数据,恢复到一个逻辑一致的状态。制定备份策略时,需要考虑备份内容和方式、备份频率以及备份介质的选择...

    从区块链技术浅谈民生档案的开发与利用.pdf

    区块链技术是一种创新的数据存储和传输方式,源自比特币的底层架构,它通过分布式共识机制、非对称加密技术、点对点传输协议以及脚本代码系统等集成创新,形成了一种去中心化的分布式基础架构。区块链可以分为公有链...

    浅谈Springboot之于Spring的优势

    浅谈Springboot之于Spring的优势 ...同时,也欢迎各位参阅本站其他相关专题,如Spring的编程式事务和声明式事务详解、Spring spel表达式使用方法示例、浅谈Spring Boot微服务项目的推荐部署方式等。

    浅谈Web服务器和应用服务器的区别

    它们通常不直接支持复杂的业务逻辑处理,比如数据库交互或事务管理,但可以通过集成其他服务器端脚本或组件技术来扩展这些功能。Web服务器的典型代表包括Apache HTTP Server、Nginx和IIS等。 应用服务器则提供了一...

    浅谈分布式锁的几种使用方式(redis、zookeeper、数据库)

    通过在查询时加上FOR UPDATE关键字,可以锁定查询结果,直到当前事务结束。这种方式可以避免插入操作导致的非阻塞问题,但依然存在其他问题,需要额外处理。 接下来,我们讨论基于Redis的分布式锁。Redis是一个内存...

    Redis基础笔记总结

    #### 三、Redis迭代演化和Redis7新特性浅谈 - **时间推移与版本升级**: - 官方博客: - 版本迭代历程中的一些重要里程碑。 - **Redis7.0新特性**: - **Redis Functions**: 提供函数调用的能力,扩展Redis的功能...

Global site tag (gtag.js) - Google Analytics