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 相关文章推荐
用Zend Encode编写开发PHP程序
Oct 09 PHP
PHP开发过程中常用函数收藏
Dec 14 PHP
Zend framework处理一个http请求的流程分析
Feb 08 PHP
PHP入门学习笔记之一
Oct 12 PHP
如何批量替换相对地址为绝对地址(利用bat批处理实现)
May 27 PHP
php调整gif动画图片尺寸示例代码分享
Dec 05 PHP
php使用cookie实现记住用户名和密码实现代码
Apr 27 PHP
php根据用户语言跳转相应网页
Nov 04 PHP
PHP编程实现计算抽奖概率算法完整实例
Aug 09 PHP
浅谈PHP接入(第三方登录)QQ登录 OAuth2.0 过程中遇到的坑
Oct 13 PHP
php和asp语法上的区别总结
May 12 PHP
php7中停止php-fpm服务的方法详解
May 09 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 危险函数解释 分析
2009/04/22 PHP
javascript 小型动画组件与实现代码
2010/06/02 PHP
php引用地址改变变量值的问题
2012/03/23 PHP
php获取目录所有文件并将结果保存到数组(实例)
2013/10/25 PHP
php读取csv实现csv文件下载功能
2013/12/18 PHP
基于PHP实现数据分页显示功能
2016/05/26 PHP
php安全配置记录和常见错误梳理(总结)
2017/03/28 PHP
javascript编程起步(第一课)
2007/01/10 Javascript
Mootools 1.2教程 正则表达式
2009/09/15 Javascript
神奇的7个jQuery 3D插件整理
2011/01/06 Javascript
JS模拟面向对象全解(一、类型及传递)
2011/07/13 Javascript
通过JS判断联网类型和连接状态的实现代码
2015/04/01 Javascript
JavaScript中getUTCSeconds()方法的使用详解
2015/06/11 Javascript
jQuery使用drag效果实现自由拖拽div
2015/06/11 Javascript
浅谈JavaScript中的作用域和闭包问题
2015/07/07 Javascript
AngularJS入门(用ng-repeat指令实现循环输出
2016/05/05 Javascript
Bootstrap 3.x打印预览背景色与文字显示异常的解决
2016/11/06 Javascript
JavaScript省市级联下拉菜单实例
2017/02/14 Javascript
Nodejs之TCP服务端与客户端聊天程序详解
2017/07/07 NodeJs
Node.js中DNS模块学习总结
2018/02/28 Javascript
Vue循环组件加validate多表单验证的实例
2018/09/18 Javascript
vuejs2.0运用原生js实现简单拖拽元素功能
2020/08/21 Javascript
layer 关闭指定弹出层的例子
2019/09/25 Javascript
vue实现页面切换滑动效果
2020/06/29 Javascript
python编写朴素贝叶斯用于文本分类
2017/12/21 Python
python smtplib模块自动收发邮件功能(二)
2018/05/22 Python
python多维数组分位数的求取方式
2020/03/03 Python
香港最大的洋酒零售连锁店:屈臣氏酒窖(Watson’s Wine)
2018/12/10 全球购物
ANINE BING官方网站:奢华的衣橱基本款和时尚永恒的单品
2019/11/26 全球购物
幼儿园元旦家长感言
2014/02/27 职场文书
数控技校生自我鉴定
2014/04/19 职场文书
环境监测与治理技术专业求职信
2014/07/06 职场文书
乡镇精神文明建设汇报材料
2014/08/15 职场文书
大学生简短的自我评价
2014/09/12 职场文书
物理分数没达标检讨书
2014/09/13 职场文书
Python实现简单得递归下降Parser
2022/05/02 Python