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 页面执行时间计算代码
Dec 04 PHP
PHP中获取变量的变量名的一段代码的bug分析
Jul 07 PHP
php array的学习笔记
May 10 PHP
修改destoon会员公司的伪静态中的com目录的方法
Aug 21 PHP
html静态页面调用php文件的方法
Nov 13 PHP
PHP实现自动对图片进行滚动显示的方法
Mar 12 PHP
PHP Reflection API详解
May 12 PHP
PHP中的Trait 特性及作用
Apr 03 PHP
thinkPHP5.0框架应用请求生命周期分析
Mar 25 PHP
谈谈从phpinfo中能获取哪些值得注意的信息
Mar 28 PHP
详解php用static方法的原因
Sep 12 PHP
浅谈laravel 5.6 安装 windows上使用composer的安装过程
Oct 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危险函数(disable_functions)
2012/02/23 PHP
工厂模式在Zend Framework中应用介绍
2012/07/10 PHP
PHP5各个版本的新功能和新特性总结
2014/03/16 PHP
PHP+Mysql+Ajax+JS实现省市区三级联动
2014/05/23 PHP
phplist及phpmailer(组合使用)通过gmail发送邮件的配置方法
2016/03/30 PHP
Javascript select控件操作大全(新增、修改、删除、选中、清空、判断存在等)
2008/12/19 Javascript
分析Node.js connect ECONNREFUSED错误
2013/04/09 Javascript
捕获浏览器关闭、刷新事件不同情况下的处理方法
2013/06/02 Javascript
js动态添加事件并可传参数示例代码
2013/10/21 Javascript
Flex通过JS获取客户端IP和计算机名的实例代码
2013/11/21 Javascript
关于JS中二维数组的声明方法
2016/09/24 Javascript
轻松搞定jQuery+JSONP跨域请求的解决方案
2018/03/06 jQuery
使用Vue.js开发微信小程序开源框架mpvue解析
2018/03/20 Javascript
详解Angular Forms中自定义ngModel绑定值的方式
2018/12/10 Javascript
python实现带验证码网站的自动登陆实现代码
2015/01/12 Python
举例讲解Python中的身份运算符的使用方法
2015/10/13 Python
Python连接PostgreSQL数据库的方法
2016/11/28 Python
基于Python实现的ID3决策树功能示例
2018/01/02 Python
django 多数据库配置教程
2018/05/30 Python
浅谈Pytorch中的torch.gather函数的含义
2019/08/18 Python
python Jupyter运行时间实例过程解析
2019/12/13 Python
python实现PDF中表格转化为Excel的方法
2020/06/16 Python
完美解决torch.cuda.is_available()一直返回False的玄学方法
2021/02/06 Python
html5自动播放mov格式视频的实例代码
2020/01/14 HTML / CSS
飞利浦法国官网:Philips法国
2019/07/10 全球购物
Agoda中文官网:安可达(低价预订全球酒店)
2021/01/18 全球购物
设计师个人求职信范文
2014/02/02 职场文书
课程改革实施方案
2014/03/16 职场文书
实习报告评语
2014/04/26 职场文书
国际商务英语专业求职信
2014/07/08 职场文书
单位个人查摆问题及整改措施
2014/10/28 职场文书
2014年生活老师工作总结
2014/12/23 职场文书
平遥古城导游词
2015/02/03 职场文书
2019年“红色之旅”心得体会1000字(3篇)
2019/09/27 职场文书
Python 数据可视化之Bokeh详解
2021/11/02 Python
Win11如何启用启动修复 ? Win11执行启动修复的三种方法
2022/04/08 数码科技