php模式-数据映射模式
2016-06-28 10:31
639 查看
概念:简言之,数据映射模式就是将对象和数据存储映射起来,对一个对象的操作会映射为对数据存储的操作。
深入理解:数据映射,是在持久化数据存储层(一般是关系型数据库)和驻于内存的数据表现层之间进行双向数据传输的数据访问层。
数据映射模式的目的是让持久化数据存储层,驻于内存的数据表现层,以及数据映射本身三者相互独立、互不依赖。这个数据访问层由一个映射器(或者数据访问对象)组成,用于实现数据传输。通用的数据访问层可以处理不同的实体类型,而专用的则处理一个或几个。
数据映射模式的核心在于它的数据模型遵循单一职责原则(single Responsibility Principle),这也是和Active Record模式的不同之处。最典型的数据映射模式例子就是数据库ORM模型(Object Relational Mapper)。
代码演示:
1.表结构
+---------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+------------------+------+-----+---------+----------------+
| id | int(11) unsigned | NO | PRI | NULL | auto_increment |
| name | varchar(32) | NO | | | |
| mobile | int(11) | NO | | 0 | |
| regtime | timestamp | YES | | NULL | |
+---------+------------------+------+-----+---------+----------------+
2.代码结构
\Libs\IDatabase.php
\Libs\Database\MySQLi.php
\Libs\Factory.php
\Libs\User.php
\Libs\UserMapper.php
调用
推荐阅读:
php 设计模式-数据映射模式(应用程序与数据库交互模式)
Eloquent ORM 实例教程 —— ORM概述、模型定义及基本查询
PHP 设计模式系列 —— 数据映射模式(Data Mapper)
PHP数据对象映射模式
深入理解:数据映射,是在持久化数据存储层(一般是关系型数据库)和驻于内存的数据表现层之间进行双向数据传输的数据访问层。
数据映射模式的目的是让持久化数据存储层,驻于内存的数据表现层,以及数据映射本身三者相互独立、互不依赖。这个数据访问层由一个映射器(或者数据访问对象)组成,用于实现数据传输。通用的数据访问层可以处理不同的实体类型,而专用的则处理一个或几个。
数据映射模式的核心在于它的数据模型遵循单一职责原则(single Responsibility Principle),这也是和Active Record模式的不同之处。最典型的数据映射模式例子就是数据库ORM模型(Object Relational Mapper)。
代码演示:
1.表结构
+---------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+------------------+------+-----+---------+----------------+
| id | int(11) unsigned | NO | PRI | NULL | auto_increment |
| name | varchar(32) | NO | | | |
| mobile | int(11) | NO | | 0 | |
| regtime | timestamp | YES | | NULL | |
+---------+------------------+------+-----+---------+----------------+
2.代码结构
\Libs\IDatabase.php
<?php namespace Libs; interface IDatabase { function connect($host,$user,$pwd,$dbname); function query($sql); function close(); }
\Libs\Database\MySQLi.php
<?php namespace Libs\Database; use Libs\IDatabase; class MySQLi implements IDatabase { protected $conn; public function connect($host,$user,$pwd,$dbname) { $conn = mysqli_connect($host,$user,$pwd,$dbname); $this->conn = $conn; } public function query($sql) { $res = mysqli_query($this->conn,$sql); return $res; } public function close() { mysqli_close($this->conn); } }
\Libs\Factory.php
<?php namespace Libs; class Factory { public static function getUser($id) { $key = 'user_'.$id; $user = Register::get($key); if(!$user){ $user = new User($id); Register::set($key, $user); } return $user; } }
\Libs\User.php
<?php namespace Libs; class User { public $id; public $name; public $mobile; public $regtime; protected $db; public function __construct($id) { $this->db = new \Libs\Database\MySQLi(); $this->db->connect(DBHOST, DBUSER, DBPWD, DBNAME); $res = $this->db->query("SELECT * FROM user WHERE id={$id} LIMIT 1"); $data = $res->fetch_assoc(); $this->id= $id; $this->mobile = $data['mobile']; $this->name = $data['name']; $this->regtime = $data['regtime']; } public function __destruct() { $this->db->query("update user set name='{$this->name}',mobile='{$this->mobile}',regtime='{$this->regtime}' where id={$this->id} limit 1"); } }
\Libs\UserMapper.php
<?php namespace Libs; class UserMapper { public function index($id) { $user = \Libs\Factory::getUser($id); $user->mobile = "1891111111"; $this->changeName($id); echo "done"; } public function changeName($id) { $user = \Libs\Factory::getUser($id); $user->name = "sacha"; } }
调用
define("DBHOST",'127.0.0.1'); define("DBUSER",'user'); define("DBPWD",'pwd'); define("DBNAME",'test'); $um = new \Libs\UserMapper(); $um->index(1);
推荐阅读:
php 设计模式-数据映射模式(应用程序与数据库交互模式)
Eloquent ORM 实例教程 —— ORM概述、模型定义及基本查询
PHP 设计模式系列 —— 数据映射模式(Data Mapper)
PHP数据对象映射模式
相关文章推荐
- PHP环境搭建及工具(dreamweaver)使用
- PHP中9大缓存技术总结
- ContentProvider 开发之简单学习
- ContentProvider 开发之简单学习
- thinkphp 3.2加载类
- 本地环境 XAMPP+phpStorm+XDebug+chrome 配置和断点调试
- RTP协议全解析(H264码流和PS流)
- PHP分页初探 一个最简单的PHP分页代码实现
- 在 PHP 中养成 7 个面向对象的好习惯
- php 在字符串指定位置插入新字符的简单实现
- PHP代码规范与质量检查工具PHPCS,PHPMD的安装与配置
- Laravel 框架 基础(一)
- 完美解决TP-LINK无线路由桥接后电脑能上网、手机不能上的问题
- [李景山php]每天laravel-20160908|Dispatcher-8
- TP框架之多文件上传
- php 在字符串指定位置插入新字符的简单实现
- PHP中9大缓存技术总结
- PHP5 mysqli的prepare准备语句使用说明
- Php Header 失效问题
- InputStream类和OutputStream类