事务脚本

  本文摘抄自《.NET企业级应用架构设计》

  业务逻辑层的模式的发展历史

  历史上,事务脚本是第一个广泛应用的业务逻辑模式。
  后来出现了基于表数据的表模块模式,仍然属于过程式模式,但是加入了一些面向对象思维。
  在面向对象开发兴起之后,出现了基于对象的业务逻辑模式,最简单的对象模型就像是数据库表的数据模型,这里的对象就是数据库中的记录,并加了一些额外的方法,这种模式通常叫做活动记录模式。
  随着业务逻辑的复杂性越大,软件的抽象程度越高,这时就应该从领域着眼,创建一个领域驱动的对象模型,这种模式通常叫做领域模型。

  事务脚本概念

  业务逻辑层是一系列过程的集合,每个集合都用来处理来自于表现层的一个请求。业务逻辑层被看做是一系列的相关的操作,系统执行的每个步骤都会被分割成更小的步骤,每个步骤都用一个操作表示,叫做事务。在这个上下文中,事务是一个不可分割的逻辑操作,但这个事务与数据库中的事务没有关系,这个模式叫做事务脚本。

  我的想法

  事实上,平时采用的事物脚本模式是过程式编程,真正的面向对象编程是领域模型,而我一直认为将业务逻辑分层,创建几个类就是面向对象编程,这真是一个莫大的讽刺啊。

  事务脚本模式概述

  事务脚本模式鼓励你放弃所有的面向对象设计,将业务组件直接映射到需要的用户操作上。该模式的关注点在于用于通过表现层所能执行的操作,并为每个操作编写一个专门的方法。这就是事务脚本。不过数据访问层通常被封装到另一些组件中,并不属于脚本的一部分。

  事务脚本的优缺点

  事务脚本就是一个简单的过程式模型,简单是事务脚本最值得一提的优势,对于逻辑不多,时间紧迫且依赖于强大的IDE的项目,事务脚本是其理想的选择。简单既是事务脚本的最大优势,同时也成为了它最大的劣势。事务脚本有造成代码重复的潜质,你会很容易的得到一系列完成类似任务的事务,最终应用程序变成了一团混乱的子程序组合。当然这时,重构闪亮登场。重构可以在很大程度上缓解事务脚本天生的劣势,不过重构也有其作用的范围。

时间: 2024-11-08 23:57:01

事务脚本的相关文章

事务脚本-领域模型

Martin Fowler定义是: 事务脚本,将所有逻辑组织在一个单一过程,进行数据库直接调用,每个业务请求都有自己的事务脚本,并且是一个类的公开方法. 领域模型,是一系列相互关联的对象,每个对象代表一定意义的独立体,既可以一起以一种大规模方式协作:也可以小到以单线方式运行. 事务脚本总体来说:就像直奔主题,平铺直叙,就功能谈功能,直接没有回旋余地:领域模型给人感觉好像肚子里就那么点货而领域模型则象是文人骚客,上了一个档次,会使用美妙表达方式,有余地. 比如唐诗:清明时节雨纷纷,路上行人欲断魂:

.NET应用架构设计—表模块模式与事务脚本模式的代码编写

阅读目录: 1.背景介绍 2.简单介绍表模块模式.事务脚本模式 3.正确的编写表模块模式.事务脚本模式的代码 4.总结 1.背景介绍 要想正确的设计系统架构就必须能正确的搞懂每个架构模式的用意,而不是胡子眉毛一把抓.现在有一个现象是什么呢,项目的结构从表面上看是很不错,层分的很合理,其实对业务系统来说也就那么几种层设计方法,但是现在很多项目的逻辑架构的设计不是理想,有很多概念大家并不是很了解,当然也许每个人对技术的追求不同罢了.不管你追求不追求,事实我们还是要去往正确的方向努力才对的. 很多人包

PHP面向对象之事务脚本模式

/* 事务脚本模式: 类似于thinkphp中的model层,或者说就是操作数据库的类. 个人觉得实践中使用起来还是挺简单方便的,就是SQL语句写死了的话,灵活性就不够. 示例代码如下: */ namespace woo\process; abstract class Base{ static $DB; //pdo对象 static $stmts = array(); //sql语句句柄 function __construct (){ $dsn = \woo\base\ApplicationR

你在用什么思想编码:事务脚本 OR 面向对象?

最近在公司内部做技术交流的时候,说起技能提升的问题,调研大家想要培训什么,结果大出我意料,很多人想要培训:面向对象编码.于是我抛出一个问题:你觉得我们现在的代码是面向对象的吗?有人回答:是,有人回答否.我对这个问题的回答是:语法上,是了,但是架构上或者思想上,不是.我们现在的大部分代码,如果要死扣一个名词的话,那就是:事务脚本. 1:最开始的事务脚本 在 Martin Fowler 的书中,存在一个典型的 应用场景,即"收入确认"(Revenue Recognition).该"

监控MySQL长事务脚本

监控长事务的脚本 #!/bin/bashmysql -N -uroot -p'密码' -e "select now(),(UNIX_TIMESTAMP(now()) - UNIX_TIMESTAMP(a.trx_started)) diff_sec,b.id,b.user,b.host,b.db,d.SQL_TEXT from information_schema.innodb_trx a inner join information_schema.PROCESSLIST b on a.TRX_

Oracle 查看 使用 UNDO 段的事务脚本

查看oracle undo segment段的信息: SELECT T1.USN, T2.NAME, T1.STATUS, T1.LATCH, T1.EXTENTS, T1.WRAPS, T1.EXTENDS FROM V$ROLLSTAT T1, V$ROLLNAME T2 WHERE T1.USN = T2.USN; 检查事务使用undo segment的情况: SELECT s.username, s.sid, pr.PID, s.OSUSER, s.MACHINE, s.PROGRAM,

录制脚本前需要理解的几个基本概念

2.1.1 事务(Transaction) 事务(Transaction)是这样一个点,我们为了衡量某个action的性能,需要在action的开始和结束位置插入这样一个范围,这就定义了一个transaction,LoadRunner 运行到该事务的开始点时,LoadRunner 就会开始计时,直到运行到该事务的结束点,计时结束.这个事务的运行时间在结果中会有反映.    插入事务操作可以在录制过程中进行,也可以在录制结束后进行.LoadRunner 可以在脚本中插入不限数量的事务. 举个例子:

MySQL--当事务遇到DDL命令

众所周知MySQL的DDL语句是非事务的,即不能对DLL语句进行回滚操作,哪在事务中包含DDL语句会怎样呢? 如: #禁用自动提交 set autocommit=off; #创建tb1 create table tb1(id int auto_increment primary key,c1 int); #开始事务 start transaction; #插入数据 insert into tb1(c1) select 1; insert into tb1(c1) select 2; insert

lr事务

事务:transaction(性能里面的定义:客户机对服务器发送请求,服务器做出反应的过程) 用于模拟用户的一个相对完整的业务操作过程:如登录,查询,交易等操作(每次http请求不会用来作为一个事务) 方式1.录制过程中,可操作 方式2.以loadrunner 自带WebTours为例, 操作步骤: 1.打WebTours首页 2.点击事务开始按钮,输入“登录” 3.输入用户名密码点击登录按钮 4.点击事务结束按钮,点击确定.(注:事务的开始与结束的名称一定要一致) 方式3.等正常录制结束后,手