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学习之PHP运算符
Oct 09 PHP
php创建多级目录代码
Jun 05 PHP
php运行出现Call to undefined function curl_init()的解决方法
Nov 02 PHP
php实现上传图片生成缩略图示例
Apr 13 PHP
php使用session二维数组实例
Nov 06 PHP
PHP模拟登陆163邮箱发邮件及获取通讯录列表的方法
Mar 07 PHP
PHP实现的蚂蚁爬杆路径算法代码
Dec 03 PHP
项目中应用Redis+Php的场景
May 22 PHP
PHP处理CSV表格文件的常用操作方法总结
Jul 01 PHP
如何正确配置Nginx + PHP
Jul 15 PHP
微信公众号开发之获取位置信息php代码
Jun 13 PHP
PHP使用PDO创建MySQL数据库、表及插入多条数据操作示例
May 30 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
syphon 虹吸式咖啡冲泡冲煮倒水的得与失
2021/03/03 冲泡冲煮
浅析PHP中的字符串编码转换(自动识别原编码)
2013/07/02 PHP
PHP mysqli事务操作常用方法分析
2017/07/22 PHP
数据结构之利用PHP实现二分搜索树
2020/10/25 PHP
JS setCapture 区域外事件捕捉
2010/03/18 Javascript
jquery 学习之二 属性(html()与html(val))
2010/11/25 Javascript
js整数字符串转换为金额类型数据(示例代码)
2013/12/26 Javascript
自定义刻度jQuery进度条及插件
2015/09/02 Javascript
Vue指令的钩子函数使用方法
2017/03/20 Javascript
使用gulp搭建本地服务器并实现模拟ajax
2017/04/05 Javascript
Vue实现百度下拉提示搜索功能
2017/06/21 Javascript
Vue学习笔记进阶篇之过渡状态详解
2017/07/14 Javascript
JavaScript实现三级联动效果
2017/07/15 Javascript
如何在Angular8.0下使用ngx-translate进行国际化配置
2019/07/24 Javascript
Python文件夹与文件的操作实现代码
2014/07/13 Python
使用python实现接口的方法
2017/07/07 Python
python中lambda()的用法
2017/11/16 Python
教你使用python画一朵花送女朋友
2018/03/29 Python
Python基于递归算法实现的汉诺塔与Fibonacci数列示例
2018/04/18 Python
Python实现的堆排序算法示例
2018/04/29 Python
python3+selenium实现qq邮箱登陆并发送邮件功能
2019/01/23 Python
python变量命名的7条建议
2019/07/04 Python
在Python中使用MongoEngine操作数据库教程实例
2019/12/03 Python
pandas中的数据去重处理的实现方法
2020/02/10 Python
python小白切忌乱用表达式
2020/05/29 Python
CSS3绘制超炫的上下起伏波动进度加载动画
2016/04/21 HTML / CSS
实例讲解HTML5的meta标签的一些应用
2015/12/08 HTML / CSS
好药师网上药店:安全合法的网上药品零售药房
2017/02/15 全球购物
学院领导推荐信
2013/10/30 职场文书
建筑安全责任书范本
2014/07/24 职场文书
个人年终总结范文
2015/03/09 职场文书
小学语文教师研修日志
2015/11/13 职场文书
导游词之南京汤山温泉
2019/11/26 职场文书
Python 可迭代对象 iterable的具体使用
2021/08/07 Python
Python学习之包与模块详解
2022/03/19 Python
Python实现视频自动打码的示例代码
2022/04/08 Python