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 mysql数据库操作分页类
Jun 04 PHP
PHP中使用cURL实现Get和Post请求的方法
Mar 13 PHP
PHP 循环删除无限分类子节点的实现代码
Jun 21 PHP
PHP调用VC编写的COM组件实例
Mar 29 PHP
ThinkPHP之M方法实例详解
Jun 20 PHP
Eclipse的PHP插件PHPEclipse安装和使用
Jul 20 PHP
php打印输出棋盘的实现方法
Dec 23 PHP
php中解析带中文字符的url函数分享
Jan 20 PHP
解决yii2左侧菜单子级无法高亮问题的方法
May 08 PHP
浅谈htmlentities 、htmlspecialchars、addslashes的使用方法
Dec 09 PHP
php文件上传及下载附带显示文件及目录功能
Apr 27 PHP
关于ThinkPhp 框架表单验证及ajax验证问题
Jul 19 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
神族 PROTOSS 概述
2020/03/14 星际争霸
php截取后台登陆密码的代码
2012/05/05 PHP
解析php中session的实现原理以及大网站应用应注意的问题
2013/06/17 PHP
PHP的Yii框架中移除组件所绑定的行为的方法
2016/03/18 PHP
PHP钩子与简单分发方式实例分析
2017/09/04 PHP
jquery HotKeys轻松搞定键盘事件代码
2008/08/30 Javascript
js函数定时器实现定时读取系统实时连接数
2014/04/30 Javascript
jQuery中index()的用法分析
2014/09/05 Javascript
基于jQuery实现最基本的淡入淡出效果实例
2015/02/02 Javascript
iPhone手机上搭建nodejs服务器步骤方法
2015/07/06 NodeJs
Vuejs第六篇之Vuejs与form元素实例解析
2016/09/05 Javascript
JS小数转换为整数的方法分析
2017/01/07 Javascript
浅析Vue 和微信小程序的区别、比较
2018/08/03 Javascript
Nuxt.js实现校验访问浏览器类型的中间件
2018/08/24 Javascript
Vux+Axios拦截器增加loading的问题及实现方法
2018/11/08 Javascript
小程序实现横向滑动日历效果
2019/10/21 Javascript
JavaScript中的函数申明、函数表达式、箭头函数
2019/12/06 Javascript
js实现简单的点名器随机色实例代码
2020/09/20 Javascript
Python 基础教程之包和类的用法
2017/02/23 Python
Python实现程序判断季节的代码示例
2019/01/28 Python
Django 权限认证(根据不同的用户,设置不同的显示和访问权限)
2019/07/24 Python
大家都说好用的Python命令行库click的使用
2019/11/07 Python
Python使用Excel将数据写入多个sheet
2020/05/16 Python
Python Matplotlib简易教程(小白教程)
2020/07/28 Python
Foot Locker英国官网:美国知名运动产品零售商
2019/02/21 全球购物
NYX Professional Makeup英国官网:美国平价专业彩妆品牌
2019/11/13 全球购物
升旗仪式主持词
2014/03/19 职场文书
医德医风演讲稿
2014/05/20 职场文书
社会体育专业大学生职业生涯规划书
2014/09/17 职场文书
党委干部批评与自我批评发言稿
2014/09/28 职场文书
优秀党员推荐材料
2014/12/18 职场文书
情侣之间的道歉短信
2015/05/12 职场文书
2015年中学体育教师工作总结
2015/10/23 职场文书
写作技巧:如何撰写一份优秀的营销策划书
2019/08/13 职场文书
Python实现简单的猜单词
2021/06/15 Python
python热力图实现的完整实例
2022/06/25 Python