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实现链结人气统计
Oct 09 PHP
获取PHP警告错误信息的解决方法
Jun 03 PHP
php中文验证码实现示例分享
Jan 12 PHP
php环境套包 dedeampz 伪静态设置示例
Mar 26 PHP
PHP JSON格式的中文显示问题解决方法
Apr 09 PHP
Zend Framework教程之Zend_Form组件实现表单提交并显示错误提示的方法
Mar 21 PHP
php中preg_replace正则替换用法分析【一次替换多个值】
Jan 17 PHP
laravel 5.1下php artisan migrate的使用注意事项总结
Jun 07 PHP
php 中的closure用法详解
Jun 12 PHP
Laravel 5.5 的自定义验证对象/类示例代码详解
Aug 29 PHP
Lumen timezone 时区设置方法(慢了8个小时)
Jan 20 PHP
php 文件上传至OSS及删除远程阿里云OSS文件
Jul 04 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
15个小时----从修改程序到自己些程序
2006/10/09 PHP
采用header定义为文件然后readfile下载(隐藏下载地址)
2014/01/31 PHP
php二维数组转成字符串示例
2014/02/17 PHP
php 判断网页是否是utf8编码的方法
2014/06/06 PHP
php给图片添加文字水印方法汇总
2015/08/27 PHP
PHP7.1方括号数组符号多值复制及指定键值赋值用法分析
2016/09/26 PHP
PHP微信企业号开发之回调模式开启与用法示例
2017/11/25 PHP
Laravel5框架添加自定义辅助函数的方法
2018/08/01 PHP
JS使用单链表统计英语单词出现次数
2016/06/16 Javascript
微信小程序实现缓存根据不同的id来进行设置和读取缓存
2017/06/12 Javascript
axios全局请求参数设置,请求及返回拦截器的方法
2018/03/05 Javascript
AngularJS模态框模板ngDialog的使用详解
2018/05/11 Javascript
从0到1搭建Element的后台框架的方法步骤
2019/04/10 Javascript
解决axios post 后端无法接收数据的问题
2019/10/29 Javascript
vue 在methods中调用mounted的实现操作
2020/08/07 Javascript
[03:44]2014DOTA2国际邀请赛 71专访:DK战队赛前讨论视频遭泄露
2014/07/13 DOTA
python self,cls,decorator的理解
2009/07/13 Python
跟老齐学Python之集合(set)
2014/09/24 Python
使用beaker让Facebook的Bottle框架支持session功能
2015/04/23 Python
Python os模块学习笔记
2015/06/21 Python
python之pandas用法大全
2018/03/13 Python
python统计字母、空格、数字等字符个数的实例
2018/06/29 Python
python 爬取马蜂窝景点翻页文字评论的实现
2020/01/20 Python
python如何通过闭包实现计算器的功能
2020/02/22 Python
Python BeautifulReport可视化报告代码实例
2020/04/13 Python
实例讲解CSS3中的box-flex弹性盒属性布局
2016/06/09 HTML / CSS
详解H5本地储存Web Storage
2017/07/03 HTML / CSS
利用canvas实现图片下载功能来实现浏览器兼容问题
2019/05/31 HTML / CSS
阿玛尼美国官方网站:Armani.com
2016/11/25 全球购物
中国医药集团国药在线:国药网
2017/02/06 全球购物
Volcom法国官网:美国冲浪滑板品牌
2017/05/25 全球购物
信息工程学院毕业生推荐信
2013/11/05 职场文书
艺术应用与设计个人的自我评价
2013/11/23 职场文书
婚宴致辞
2015/07/28 职场文书
Mysql效率优化定位较低sql的两种方式
2021/05/26 MySQL
Python连续赋值需要注意的一些问题
2021/06/03 Python