PHP数据源架构模式之表入口模式实例分析


Posted in PHP onJanuary 23, 2020

本文实例讲述了PHP数据源架构模式之表入口模式。分享给大家供大家参考,具体如下:

martin fowler在《企业应用架构模式》一书中将我们平常接触到的应用开发分为三层:表现层、领域层和数据源层。

其中领域层的领域逻辑模式有:事务脚本、领域模型以及表模块。

1、事务脚本最容易理解也最易于开发,不过由于易造成代码重复等问题,不利于后期的维护,比较适合开发逻辑较为简单的业务,比如只有几个用于展示企业信息的企业站等;

2、领域模型是三种模式中最为复杂的模式,缺点显而易见,需要较高的学习成本,不过优点也很鲜明,就是代码清晰,复用率高,便于后期的维护,比较适合用于复杂多变的应用情形下;

3、表模块模式则介于事物脚本和领域模型之间,我们开发中小型项目时通常使用的都是表模块模式。

好了,对于领域逻辑模式个人只有以上的粗浅理解,具体等以后加深理解了概念之后再来详谈。

这里想跟大家说一说数据源层的数据源架构模式,主要有四种:表入口模式、行入口模式、活动记录和数据映射器。

今天先讲最简单的表入口模式。

书中对表入口模式的定义为:充当数据库表访问入口的对象,一个实例处理表中的所有行。

可以理解为对之前分散在各个页面的sql语句进行封装,一张表就是一个对象,该对象处理所有与该表有关的业务逻辑,很好的提高了代码的复用性。

现在想起来,当初刚毕业那会儿,经常使用表入口模式。

具体的实现方式参见代码:

database.php

<?php
class Database{
 //只是为了演示,通常情况下数据库的配置是会单独写在配置文件中的
 private static $_dbConfig = array(
 'host' => '127.0.0.1',
 'username' => 'root',
 'pwd' => '',
 'dbname' => 'bussiness'
 );
 private static $_instance;
 public static function getInstance(){
 if(is_null(self::$_instance)){
  self::$_instance = new mysqli(self::$_dbConfig['host'], self::$_dbConfig['username'], self::$_dbConfig['pwd'], self::$_dbConfig['dbname']);
  if(self::$_instance->connect_errno){
  throw new Exception(self::$_instance->connect_error);
  }
 }
 return self::$_instance;
 }
}

person.php

<?php
require_once 'database.php';
class Person extends Database{
 public $instance;
 public $table = 'person';
 public function __construct(){
 $this->instance = Person::getInstance();
 }
 public function getPersonById($personId){
 $sql = "select * from $this->table where id=$personId";
 echo $sql;
 return $this->instance->query($sql);
 }
 /**其他的一些增删改查操作方法...**/
}

index.php

<?php
require_once 'person.php';
$person = new Person();
var_dump($person->getPersonById(1)->fetch_assoc());
die();

运行结果:

select * from person where id=1
array (size=2)
 'id' => string '1' (length=1)
 'name' => string 'ben' (length=3)

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
php下使用无限生命期Session的方法
Mar 16 PHP
php array的学习笔记
May 10 PHP
解密ThinkPHP3.1.2版本之模板继承
Jun 19 PHP
PHP中的替代语法简介
Aug 22 PHP
WAF的正确bypass
Jan 05 PHP
PHP实现时间比较和时间差计算的方法示例
Jul 24 PHP
php简单中奖算法(实例)
Aug 15 PHP
php面向对象程序设计中self与static的区别分析
May 21 PHP
php中的buffer缓冲区用法分析
May 31 PHP
thinkphp整合系列之极验滑动验证码geetest功能
Jun 18 PHP
PHP连接MySQL数据库的三种方式实例分析【mysql、mysqli、pdo】
Nov 04 PHP
PHP cookie与session会话基本用法实例分析
Nov 18 PHP
TP3.2.3框架文件上传操作实例详解
Jan 23 #PHP
php的RSA加密解密算法原理与用法分析
Jan 23 #PHP
PHP检查文件是否存在,不存在自动创建及读取文件内容操作示例
Jan 23 #PHP
PHP实现一个按钮点击上传多个图片操作示例
Jan 23 #PHP
利用PHP内置SERVER开启web服务(本地开发使用)
Jan 22 #PHP
PHP读取文件,解决中文乱码UTF-8的方法分析
Jan 22 #PHP
php经典趣味算法实例代码
Jan 21 #PHP
You might like
PHP中显示格式化的用户输入
2006/10/09 PHP
php生成的html meta和link标记在body标签里 顶部有个空行
2010/05/18 PHP
解析thinkphp中的M()与D()方法的区别
2013/06/22 PHP
php安装xdebug/php安装pear/phpunit详解步骤(图)
2013/12/22 PHP
PHP自动重命名文件实现方法
2014/11/04 PHP
PHP中file_exists()判断中文文件名无效的解决方法
2014/11/12 PHP
用php代码限制国内IP访问我们网站
2015/09/26 PHP
PHP使用Session实现上传进度功能详解
2019/08/06 PHP
PHP For循环字母A-Z当超过26个字母时输出AA,AB,AC
2020/02/16 PHP
学习YUI.Ext第五日--做拖放Darg&amp;Drop
2007/03/10 Javascript
JavaScript 学习笔记之一jQuery写法图片等比缩放以及预加载
2012/06/28 Javascript
在Firefox下js select标签点击无法弹出
2014/03/06 Javascript
javascript解析json数据的3种方式
2014/05/08 Javascript
jQuery子窗体取得父窗体元素的方法
2015/05/11 Javascript
JavaScript实现可拖拽的拖动层Div实例
2015/08/05 Javascript
JS使用JSON作为参数实例分析
2016/06/23 Javascript
AngularJs Scope详解及示例代码
2016/09/01 Javascript
基于vue监听滚动事件实现锚点链接平滑滚动的方法
2018/01/17 Javascript
vue axios基于常见业务场景的二次封装的实现
2018/09/21 Javascript
js中位数不足自动补位扩展padLeft、padRight实现代码
2020/04/06 Javascript
vue中组件通信详解(父子组件, 爷孙组件, 兄弟组件)
2020/07/27 Javascript
JavaScript常用8种数组去重代码实例
2020/09/09 Javascript
[57:59]EG vs Secret 2018国际邀请赛淘汰赛BO3 第一场 8.22
2018/08/23 DOTA
Python实现简单的代理服务器
2015/07/25 Python
python实现简单聊天应用 python群聊和点对点均实现
2017/09/14 Python
Python使用wget实现下载网络文件功能示例
2018/05/31 Python
Python Opencv实现图像轮廓识别功能
2020/03/23 Python
对python中各个response的使用说明
2020/03/28 Python
Pycharm创建文件时自动生成文件头注释(自定义设置作者日期)
2020/11/24 Python
PHP笔试题
2012/02/22 面试题
租赁协议书范本
2014/04/22 职场文书
文明美德伴我成长演讲稿
2014/05/12 职场文书
2014年度安全生产目标管理责任书
2014/07/25 职场文书
吴仁宝观后感
2015/06/09 职场文书
举起手来观后感
2015/06/09 职场文书
Python爬虫入门案例之爬取去哪儿旅游景点攻略以及可视化分析
2021/10/16 Python