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 30 PHP
PHP文件大小格式化函数合集
Mar 10 PHP
php中使用key,value,current,next和prev函数遍历数组的方法
Mar 17 PHP
php curl请求信息和返回信息设置代码实例
Apr 27 PHP
php实现简单的语法高亮函数实例分析
Apr 27 PHP
php 把数字转换成汉字的代码
Jul 21 PHP
php数字运算验证码的实现代码
Jul 30 PHP
php 微信公众平台开发模式实现多客服的实例代码
Nov 07 PHP
PHP实现的redis主从数据库状态检测功能示例
Jul 20 PHP
PHP区块查询实现方法分析
May 12 PHP
PHP实现财务审核通过后返现金额到客户的功能
Jul 04 PHP
PHP编程一定要改掉的5个不良习惯
Sep 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实现微信模拟登陆并给用户发送消息的方法【文字,图片,图文】
2017/06/29 PHP
php微信开发之关键词回复功能
2018/06/13 PHP
JavaScript prototype 使用介绍
2013/08/29 Javascript
jquery ajax 调用失败的原因示例介绍
2013/09/27 Javascript
ie7+背景透明文字不透明超级简单的实现方法
2014/01/17 Javascript
JQuery下拉框应用示例介绍
2014/04/23 Javascript
用html+css+js实现的一个简单的图片切换特效
2014/05/28 Javascript
原生js实现ajax方法(超简单)
2016/09/20 Javascript
jQuery插件zTree实现的多选树效果示例
2017/03/08 Javascript
Vue常用指令V-model用法
2017/03/08 Javascript
Ionic学习日记实现验证码倒计时
2018/02/08 Javascript
layui select获取自定义属性方法
2018/08/15 Javascript
解决betterScroll在vue中存在图片时,出现拉不动的问题
2018/09/27 Javascript
react koa rematch 如何打造一套服务端渲染架子
2019/06/26 Javascript
vue接口请求加密实例
2020/08/11 Javascript
Openlayers绘制地图标注
2020/09/28 Javascript
python设置windows桌面壁纸的实现代码
2013/01/28 Python
本地文件上传到七牛云服务器示例(七牛云存储)
2014/01/11 Python
python使用PyFetion来发送短信的例子
2014/04/22 Python
Python实现登陆文件验证方法
2018/10/06 Python
python 解决动态的定义变量名,并给其赋值的方法(大数据处理)
2018/11/10 Python
详解Python Matplotlib解决绘图X轴值不按数组排序问题
2019/08/05 Python
numpy np.newaxis 的实用分享
2019/11/30 Python
OpenCV 使用imread()函数读取图片的六种正确姿势
2020/07/09 Python
python自动从arxiv下载paper的示例代码
2020/12/05 Python
预备党员党校学习自我评价分享
2013/11/12 职场文书
优秀的毕业生的自我评价
2013/12/12 职场文书
《水乡歌》教学反思
2014/04/24 职场文书
交警个人先进事迹材料
2014/05/11 职场文书
2015年百日安全活动总结
2015/03/26 职场文书
瞿秋白纪念馆观后感
2015/06/10 职场文书
员工升职自我评价
2019/03/26 职场文书
pytorch加载预训练模型与自己模型不匹配的解决方案
2021/05/13 Python
详解JAVA中的OPTIONAL
2021/06/14 Java/Android
Java版 简易五子棋小游戏
2022/05/04 Java/Android
SpringBoot项目部署到阿里云服务器的实现步骤
2022/06/28 Java/Android