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&amp;MYSQL分页原理及实现
Jan 02 PHP
php更改目录及子目录下所有的文件后缀扩展名的代码
Oct 12 PHP
php设计模式 State (状态模式)
Jun 26 PHP
解决php使用异步调用获取数据时出现(错误c00ce56e导致此项操作无法完成)
Jul 03 PHP
PHP 中 DOMDocument保存xml时中文出现乱码问题的解决方案
Sep 19 PHP
windows下的WAMP环境搭建图文教程(推荐)
Jul 27 PHP
PHP实现双链表删除与插入节点的方法示例
Nov 11 PHP
PHP耦合设计模式实例分析
Aug 08 PHP
PHP通过get方法获得form表单数据方法总结
Sep 12 PHP
php实现简单的守护进程创建、开启与关闭操作
Aug 13 PHP
PHP正则之正向预查与反向预查讲解与实例
Apr 06 PHP
THINKPHP5.1 Config的配置与获取详解
Jun 08 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数组函数序列之array_flip() 将数组键名与值对调
2011/11/07 PHP
PHP自毁程序(慎用)
2015/07/09 PHP
php微信开发自定义菜单
2016/08/27 PHP
PHP的介绍以及优势详细分析
2019/09/05 PHP
jquery 表格分页等操作实现代码(pagedown,pageup)
2010/04/11 Javascript
JQuery之拖拽插件实现代码
2011/04/14 Javascript
javascript中的void运算符语法及使用介绍
2013/03/10 Javascript
Struts2的s:radio标签使用及用jquery添加change事件
2013/04/08 Javascript
jquery实现通用版鼠标经过淡入淡出效果
2014/06/15 Javascript
JS实现状态栏跑马灯文字效果代码
2015/10/24 Javascript
基于jQuery实现Ajax验证用户名是否存在实例
2016/03/30 Javascript
JavaScript 身份证号有效验证详解及实例代码
2016/10/20 Javascript
js canvas仿支付宝芝麻信用分仪表盘
2016/11/16 Javascript
bootstrap table配置参数例子
2017/01/05 Javascript
原生js轮播(仿慕课网)
2017/02/15 Javascript
jQuery开源组件BootstrapValidator使用详解
2017/06/29 jQuery
如何在vue中使用kindeditor富文本编辑器
2020/12/19 Vue.js
[47:38]Optic vs VGJ.S 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
Python遍历目录的4种方法实例介绍
2015/04/13 Python
python排序方法实例分析
2015/04/30 Python
利用numpy实现一、二维数组的拼接简单代码示例
2017/12/15 Python
Python+Django搭建自己的blog网站
2018/03/13 Python
Python cookbook(数据结构与算法)将多个映射合并为单个映射的方法
2018/04/19 Python
PyQt打开保存对话框的方法和使用详解
2019/02/27 Python
在macOS上搭建python环境的实现方法
2019/08/13 Python
基于python的BP神经网络及异或实现过程解析
2019/09/30 Python
Python使用gluon/mxnet模块实现的mnist手写数字识别功能完整示例
2019/12/18 Python
python 实现两个npy档案合并
2020/07/01 Python
驴妈妈旅游网:中国新型的B2C旅游电子商务网站
2016/08/16 全球购物
美国葡萄酒网上商店:Martha Stewart Wine Co.
2019/03/17 全球购物
职业生涯规划书基本格式
2014/01/06 职场文书
酒店总经理助理岗位职责
2014/02/01 职场文书
实习老师离校感言
2014/02/03 职场文书
大学新学期计划书
2014/04/28 职场文书
音乐教师个人总结
2015/02/06 职场文书
摩登时代观后感
2015/06/03 职场文书