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设计模式 Prototype (原型模式)代码
Jun 26 PHP
PHP写UltraEdit插件脚本实现方法
Dec 26 PHP
PHP json格式和js json格式 js跨域调用实现代码
Sep 08 PHP
php获取参数的几种方法总结
Feb 18 PHP
php实现的漂亮分页方法
Apr 17 PHP
php中mysql连接和基本操作代码(快速测试使用,简单方便)
Apr 25 PHP
php开发中的页面跳转方法总结
Apr 26 PHP
PHP图像识别技术原理与实现
Oct 27 PHP
PHP从尾到头打印链表实例讲解
Sep 27 PHP
PHP7引入的&quot;??&quot;和&quot;?:&quot;的区别讲解
Apr 08 PHP
解决laravel groupBy 对查询结果进行分组出现的问题
Oct 09 PHP
PHP超全局变量实现原理及代码解析
Sep 01 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
星际争霸中的对战模式介绍
2020/03/04 星际争霸
常用表单验证类,有了这个,一般的验证就都齐了。
2006/12/06 PHP
php模板函数 正则实现代码
2012/10/15 PHP
PHP中使用file_get_contents post数据代码例子
2015/02/13 PHP
帝国CMS留言板回复后发送EMAIL通知客户
2015/07/06 PHP
一个刚完成的layout(拖动流畅,不受iframe影响)
2007/08/17 Javascript
JavaScript 常用函数库详解
2009/10/21 Javascript
jquery中ajax调用json数据的使用说明
2011/03/17 Javascript
HTML DOM的nodeType值介绍
2011/03/31 Javascript
JS命名空间的另一种实现
2013/08/09 Javascript
JavaScript使用Replace进行字符串替换的方法
2015/04/14 Javascript
JS实现Select的option上下移动的方法
2016/03/01 Javascript
Bootstrap表单Form全面解析
2016/06/13 Javascript
jQuery Raty 一款不错的星级评分插件
2016/08/24 Javascript
微信小程序 loading 详解及实例代码
2016/11/09 Javascript
jQuery基于ajax方式实现用户名存在性检查功能示例
2017/02/10 Javascript
js仿微博动态栏功能
2017/02/22 Javascript
JS+CSS实现下拉刷新/上拉加载插件
2017/03/31 Javascript
angular.js实现购物车功能
2017/10/23 Javascript
jquery如何实现点击空白处隐藏元素
2017/12/05 jQuery
Vue的实例、生命周期与Vue脚手架(vue-cli)实例详解
2017/12/27 Javascript
vue 过滤器filter实例详解
2018/03/14 Javascript
vue2.0自定义指令示例代码详解
2019/04/25 Javascript
nodejs dgram模块广播+组播的实现示例
2019/11/04 NodeJs
element-ui table组件如何使用render属性的实现
2019/11/04 Javascript
Python学习笔记(二)基础语法
2014/06/06 Python
在linux下实现 python 监控usb设备信号
2019/07/03 Python
Python 读取xml数据,cv2裁剪图片实例
2020/03/10 Python
联想法国官方网站:Lenovo法国
2018/10/18 全球购物
Dower & Hall官网:英国小众轻奢珠宝品牌
2019/01/31 全球购物
应届生服务员求职信
2013/10/31 职场文书
季度思想汇报
2014/01/01 职场文书
《花瓣飘香》教学反思
2014/04/15 职场文书
开工典礼策划方案
2014/05/23 职场文书
Python3 使用pip安装git并获取Yahoo金融数据的操作
2021/04/08 Python
Linux系统下安装PHP7.3版本
2021/06/26 PHP