美文网首页
PHP设计模式(四)-数据库对象映射模式

PHP设计模式(四)-数据库对象映射模式

作者: EwanRenton | 来源:发表于2018-07-26 16:35 被阅读0次

layout: post
title: "PHP设计模式(四)-数据库对象映射模式"
date: 2016-06-06 11:24:26 +0800
comments: true
categories: [php]


1、模式定义

在了解数据映射模式之前,先了解下数据映射,它是在持久化数据存储层(通常是关系型数据库)和驻于内存的数据表现层之间进行双向数据传输的数据访问层。

数据映射模式的目的是让持久化数据存储层、驻于内存的数据表现层、以及数据映射本身三者相互独立、互不依赖。这个数据访问层由一个或多个映射器(或者数据访问对象)组成,用于实现数据传输。通用的数据访问层可以处理不同的实体类型,而专用的则处理一个或几个。

数据映射模式的核心在于它的数据模型遵循单一职责原则(Single Responsibility Principle), 这也是和 Active Record 模式的不同之处。最典型的数据映射模式例子就是数据库 ORM 模型 (Object Relational Mapper)。

ha_cl表
[图片上传失败...(image-9e012e-1532594097674)]

    <?php
    namespace Baobab;
    class Hacl{
    public $id;
    public $haclname;
    public $haclcode;
    public $hacls;
    protected $db;
    function __construct($id){
    $this->db = new \Baobab\Database\Mysqli();
    $this->db->connect('127.0.0.1', 'root', '', 'test');
    $res = $this->db->query("select * from ha_cl where id = {$id}");
    $data = $res->fetch_assoc();
    $this->id = $data['ID'];
    $this->haclname = $data['ha_cl_name'];
    $this->haclcode = $data['ha_cl_code'];
    $this->hacls = $data['hacls'];
    }
    function __destruct(){
    $this->db->query("update ha_cl set
    ha_cl_code = '{$this->haclcode}',
    ha_cl_name = '{$this->haclname}',
    hacls = '{$this->hacls}'
    where ID = {$this->id}
    limit 1");
    }
    }
    //工厂模式
    <?php
    namespace Baobab;
    class Factory{
    static function getHacl($id){
    $key = 'user_'.$id;
    $user = \Baobab\Register::get($key);//表中id不同表示的是不同的对象
    if(!$user){
    $user = new \Baobab\Hacl($id);
    \Baobab\Register::set($key, $user);
    }
    return $user;
    }
    }
    <?php
    namespace Baobab;
    class Register{
    protected static $objects;
    static function set($alias, $object){
    self::$objects[$alias] = $object;
    }
    static function _unset($alias) {
    unset(self::$objects[$alias]);
    }
    static function get($name) {
    return self::$objects[$name];
    }
    }
    class Page{
    function index(){
    $hacl = Baobab\Factory::getHacl(13);
    $hacl->haclname = '测试名称';
    $this->test();
    echo 'ok';
    }
    function test(){
    $hacl = Baobab\Factory::getHacl(13);
    $hacl->hacls = '测试内容';
    }
    }
    $page = new Page();
    $page->index(); 

相关文章

  • PHP设计模式(四)-数据库对象映射模式

    layout: posttitle: "PHP设计模式(四)-数据库对象映射模式"date: 2016-06-06...

  • 《PHP设计模式大全》系列分享专栏

    php设计模式介绍之编程惯用法第1/3页 php设计模式介绍之值对象模式第1/5页 介绍php设计模式中的工厂模式...

  • php设计模式(五)数据对象映射模式

    数据对象映射模式 orm 对象和数据存储映射,对对象的操作映射为对数据的存储操作

  • Data Mapper模式

    定义 一种映射模式,可以在数据对象与数据库间传递数据,并且保证对象,数据库,映射器3者独立。 类型 领域模型模式(...

  • ThinkPHP设计模式与Trait技术

    阅读原文 设计模式 单例模式 工厂模式 对象注册树 示例 运行 Trait技术 自 PHP 5.4.0 起,PHP...

  • 简单的设计模式

    设计模式 单例模式 这个类只能创建一个对象。 php的应用主要在于数据库应用,一个应用中会存在大量的数据库操作,使...

  • 开发指南

    显示界面层设计模式 对象-对象映射 简单属性映射 复杂类型映射 双向映射 隐式和显示映射 递归和集合映射 依赖注入...

  • 单例模式

    面向对象设计的设计模式(四):单例模式

  • PHP完整实战23种设计模式

    前言 设计模式是面向对象的最佳实践 实战 PHP实战创建型模式 单例模式 工厂模式 抽象工厂模式 原型模式 建造者...

  • php设计模式之数据映射模式

    数据映射模式 数据映射模式的目的是让持久化数据存储层,驻于内存的数据表现层以及数据映射本身三者相互独立、互不依赖....

网友评论

      本文标题:PHP设计模式(四)-数据库对象映射模式

      本文链接:https://www.haomeiwen.com/subject/zeibmftx.html