Home
JavaEE
Java GUI
Framework
DHtml
Android
插画
教程下载

ATOM 2.0   RSS 2.0
Add to iGoogle Add to Live.com
  • 今天终于收到金山快盘的邀请码
  • 利用最短ie判断在不同浏览器上播放背景音乐
  • 对插画方面的一点感受与回忆
  • 网上看到的两个死里逃生的图片,记录一下
  • 今天开通了糖果社区,附几个激活码
  • 终于可以实现我的多个微博实时同步了
  • 备案和现场拍照就是对站长们的瞎折腾
  • 对Android在互联网应用开发上的纠结
  • 收藏夹中的书签都没了,决定写一个自已的书签管理器
  • 测试自已整理的本机的webapps客户端发送博文能否成功。
  • 今天开通了糖果社区,附几个激活码
  • 终于可以实现我的多个微博实时同步了
  • 备案和现场拍照就是对站长们的瞎折腾
  • 昨天借用飞姐的佳作做的一个浪漫爱情网页
  • 有几个腾讯微博的邀请码(实时更新)
  • BB的网站移到了GAE-JAVA上了
  • 一个基于GAE Python Web.py和JQuery的留言本程序
  • 类许愿墙的一个告白网站和一个电子书网站
  • Android中用Bitmap获取图片中某个区域的图象
  • 对暴力破解带密码的QQ相册的可行性分析
  • 对淘宝web旺旺版一些通讯接口的研究

对php也分离为事务层和业务逻辑层的方法

posted by David Chen at February 28, 2008, 6:27 AM    

事务层和业务逻辑层在java是比较常用的写法, 因为 php 是以向面过程出名,当支持oop的时候,我想就可以好像
java那样再细分多事务层和逻辑层, 我一般定义为service层和dao层, dao层负责数据库的update,select等,
但是dao层是没有事务的,只有行为; service层是有事务的,但不应该出现sql等的行为,事务与逻辑分离,就可以解
决一些batch update的问题, 不在dao中出现事务,就是为了解决同时有多个update行为时带来的高偶合,
dao的接口与子类的定义, service接口与子类的定义, 这个例子其实介绍php的接口用法可能更加好,,呵呵

interface Dao {
    // do some sql , no transaction,
    public function doMyDao();
}

class ADao implements Dao {
    public function doMyDao() {
      echo "Now Time: " . time();
    }
}

class BDao implements Dao {
    public function doMyDao() {
      echo "Now Date: " . date("Ymd");
    }
}

interface Service {
    public function setDao( $_dao ); // $_dao if typeof interface Dao
    public function doMyService();
}

class AService implements Service {
    var $dao = NULL; // 该属性的类型,应该是 上面的接口Dao的类型,
    public function setDao( $_dao ) {
      $this->dao = $_dao;
    }
// 定义一些带事务的function,
    public function doMyService() {
// 在这里定义了回调函数,回调函数的函数体是直接调用 dao的 doMyDao()方法, 将会在这里进行事务,
// 熟悉java的人一定可以明白这个写法, 我是java出来的, 一些设计和开发模式保留着java的习惯.
      $st = new SqlTransaction( create_function(
        '$tmpDao',
        'return $tmpDao->doMyDao();'
        ),
        $this->dao);
      $st->execute();
    }
}

// 这是一个事务管理类, 负责事务的提交,回滚
class SqlTransaction {
    var $callBack = NULL; // 回调函数
    var $param = NULL; // 回调函数的参数
    function SqlTransaction( $_callBack, $_param ) {
      $this->param = $_param;
      $this->callBack = $_callBack;
    }
    function execute() {
// do some transaction
// beginTransaction()
      $re = call_user_func( $this->callBack, $this->param );
// $re is affected rows, 调用回调函数,并给回调函数传值, 回调函数的函数体在上面有定义
      if( $re > 1 ) ; // commit();
      else if( $re == 0 ) ; // no affected
      else ; // error, rollBack();
      return $re;
// 根据回调函数不同的返回值,就可以判定运行结果,以控制事务的提交和回滚.
    }
}

// 例子
    $aService = new AService();
    $aService->setDao( new ADao() );
    $aService->doMyService();
// 如果传值是ADao,那么doMyService 中最后的结果是调用ADao中的doMyDao,同理用于BDao
Labels:   Php  
Trackback:   http://cwq.iou1314.com/php-transaction_a287
微博最近更新
[2010-07-31 16:33]    今天下午又将昨天赢的哎齐出来了,郁闷,一进一出,要有入没出才行啊。
[2010-07-31 07:40]    昨晚又去啊泄度开台,呢次赢左差唔多3旧水,下周星期一请假,回郁南去转社保和入党资料。
本站内的任何文章,只代表个人意见或学习所用,如有版权声明,请尊重作者的劳动成果,在转载时请保留原始链接并注明出处。
Power by David's PhpCms, © 2007 - 2010 CWQ.IOU1314.COM All Rights Reserved.