Home  >  Article  >  php教程  >  数据源架构模式之活动记录

数据源架构模式之活动记录

WBOY
WBOYOriginal
2016-06-13 10:40:50905browse

  【活动记录的意图】

  一个对象,它包装数据表或视图中某一行,封装数据库访问,并在这些数据上增加了领域逻辑。

  【活动记录的适用场景】

  适用于不太复杂的领域逻辑,如CRUD操作等。

  【活动记录的运行机制】

  对象既有数据又有行为。其使用最直接的方法,将数据访问逻辑置于领域对象中。

  活动记录的本质是一个领域模型,这个领域模型中的类和基数据库中的记录结构应该完全匹配,类的每个域对应表的每一列。

  一般来说,活动记录包括如下一些方法:

  1、由数据行构造一个活动记录实例;

  2、为将来对表的插入构造一个新的实例;

  3、用静态查找方法来包装常用的SQL查询和返回活动记录;

  4、更新数据库并将活动记录中的数据插入数据库;

  5、获取或设置域;

  6、实现部分业务逻辑。

  【活动记录的优点和缺点】

  优点:

  1、简单,容易创建并且容易理解。

  2、在使用事务脚本时,减少代码复制。

  3、可以在改变数据库结构时不改变领域逻辑。

  4、基于单个活动记录的派生和测试验证会很有效。

  缺点:

  1、没有隐藏关系数据库的存在。

  2、仅当活动记录对象和数据库中表直接对应时,活动记录才会有效。

  3、要求对象的设计和数据库的设计紧耦合,这使得项目中的进一步重构很困难

  【活动记录与其它模式】

  数据源架构模式之行数据入口:活动记录与行数据入口十分类似。二者的主要差别是行数据入口 仅有数据库访问而活动记录既有数据源逻辑又有领域逻辑。

  【活动记录的PHP示例】

 

  1.    
  2. /**  
  3.  * 企业应用架构 数据源架构模式之活动记录 2010-10-17 sz  
  4.  * @author phppan.p#gmail.com  http://www.phppan.com  
  5.  * 哥学社成员(http://www.blog-brother.com/)  
  6.  * @package architecture  
  7.  */ 
  8.    
  9. /**  
  10.  * 定单类  
  11.  */ 
  12. class Order {  
  13.    
  14.     /**  
  15.      *  定单ID  
  16.      * @var   
  17.      */ 
  18.     private $_order_id;  
  19.    
  20.     /**  
  21.      * 客户ID  
  22.      * @var   
  23.      */ 
  24.     private $_customer_id;  
  25.    
  26.     /**  
  27.      * 定单金额  
  28.      * @var   
  29.      */ 
  30.     private $_amount;  
  31.    
  32.     public function __construct($order_id$customer_id$amount) {  
  33.         $this->_order_id = $order_id;  
  34.         $this->_customer_id = $customer_id;  
  35.         $this->_amount = $amount;  
  36.     }  
  37.    
  38.     /**  
  39.      * 实例的删除操作  
  40.      */ 
  41.     public function delete() {  
  42.         $sql = "DELETE FROM Order SET WHERE order_id = " . $this->_order_id . " AND customer_id = "  . $this->_customer_id;  
  43.         return DB::query($sql);  
  44.     }  
  45.    
  46.     /**  
  47.      * 实例的更新操作  
  48.      */ 
  49.     public function update() {  
  50.     }  
  51.    
  52.     /**  
  53.      * 插入操作  
  54.      */ 
  55.     public 
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn