"/>
·设为首页收藏本站📧邮箱修改🎁免费下载专区💎积分购买✅卡密充值📒收藏夹🎖️众筹悬赏👽聊天室
DZ插件网 门户 站长圈 查看内容

PHP框架路由实现原理

2022-7-31 02:50| 发布者: admin| 查看: 400| 评论: 0|原作者: 架构师学习路线

摘要: 前言/PREFACEPHP框架就是一种可以在项目开发过程中,提高开发效率,创建更为稳定的程序,并减少开发者重复编写代码的基础架...

前言/PREFACE

PHP框架就是一种可以在项目开发过程中,提高开发效率,创建更为稳定的程序,并减少开发者重复编写代码的基础架构。



MVC模式


MVC模式(Model-View-Controller)是软件工程中的一种软件架构模式。

控制器(Controller):负责转发请求,对请求进行处理。 

视图(View):界面设计人员进行图形界面的设计。 

模型(Model):程序员编写程序应有的功能(实现算法等),数据库专家进行数据管理和数据库设计(可以实现具体的功能)。即,数据和改变数据的操作。



框架结构

                                          单一入口使得每一个请求都需经过这个入口文件处理,文件由此开始进行分发,减少重复存在一些通用的初始化操作,更容易管理Controller层。



路由


路由是对来自客户端的请求的URL解析,并把指定的URL分派给对应的 Controller 来处理。

一个Controller控制器又是由一组具有相关功能的Action组成,Action方法是一个URL访问的最小单元。

路由就是找到这个控制器文件,并且执行它下面的方法。



数据模型

 

1、数据库类的实现 

2、数据模型层理论

 

对象关系映射(Object Relational Mapping,简称ORM、O/RM 或 O/R mapping)。

把数据库中的一个表直接映射为一个对象,基于这个对象进行赋值、保存等操作,并且减少写SQL语句,提高开发效率。

PO(persistant object): 与一个数据库中的表的一行记录相对应的对象,称之为PO持久对象。PO中应该不包含任何对数据库的操作(也就是只有属性,没有方法),它仅仅是对表记录的映射。

BO(business Object): 主要作用是把业务逻辑封装为一个对象。这个对象可以包括一个或者多个其他对象。比如出货单就包含有商品简介、订单详情、消费者信息等。商品简介对应一个PO,订单详情对应一个PO,消费者联系信息对应一个PO。建立一个对应出货单的BO对象处理出货单,每个BO包含这些PO。这样处理逻辑时,可以针对BO去处理。

VO(Value Object,值对象): 界面显示的数据对象,一个界面对应一个VO对象。

DTO(Data Transfer Object): 传输PO对象到VO进行一些过滤。它可以用在任何需要数据传输的地方。 

(注意:在创建PO、DTO、VO时,不要给这些对象赋初始默认值)。

传统的ORM模式提倡数据和数据操作分离。而在Active Record中,模型层集成了ORM的功能,它们既代表实体,包含业务逻辑,又是数据对象,并负责把自己存储到数据库中,存储的这一部分代码是在父类中实现好的,属于框架的一部分,模型只需要简单调用父类的方法来完成持久化。在Active Record模式中的数据对象不再是PO对象,而是DAO(Data Access Object)对象。

比如,User类继承了父类Model,拥有父类父类所拥有的增删改查等功能(比如调用save()方法,实现数据保存;但其内部还是使用SQL拼装实现数据库操作,只是封装好后使用ORM会自动生成SQL语句;一般用ORM实现简单的CURD操作,复杂的查询还是更倾向于使用原生的SQL实现),进而User这个PO对象上升为一个Dao对象。

Service:把一系列的数据库操作组合起来,称之为Service。向上负责接收页面传递的参数以及数据的传输,向下负责与数据库打交道。

视图:

早期,使用smarty等专业的模板引擎来做视图层,后期,随着前后端分离理念的发展以及前端MVC框架的诞生,越来越多涉及显示的工作都由前端JavaScript +JSON来实现了。MVC中的显示层开始轻量化、API化发展。

 


路由的作用与优点


1.、在一些复杂的业务场景下,灵活性比较强,很多功能都是动态配置的,比如下发一个活动页面,我们事先并不知道具体的目标页面,但如果事先做了约定,提前做好页面映射,便可以自由配置;

2、随着业务量的增长,客户端必然随之膨胀,开发人员的工作量越来越大,比如64K问题,比如协作开发问题。App一般都会走向组件化的道路,而组件化的前提就是解耦,那么我们首先要做的就是解耦页面之间的依赖关系;

3、简化代码,数行跳转代码精简成一行代码;

4、结果回调,每次跳转都会回调跳转结果;

5、编译期处理注解,不影响运行时性能;

6、自定义拦截器,可以对路由进行拦截,比如登录判断和埋点处理;

7、支持多模块使用,支持组件化开发。



*声明:本文于网络整理,版权归原作者所有,如来源信息有误或侵犯权益,请联系我们删除或授权事宜



上一篇:比微信早生4年,曾红极一时的通讯软件彻底凉了
下一篇:BurpSuite全局代理

鲜花

握手

雷人

路过

鸡蛋

评论

您需要登录后才可以发表言论 登录立即注册
创宇盾启航版免费网站防御网站加速服务
投诉/建议联系

discuzaddons@vip.qq.com

未经授权禁止转载,复制和建立镜像,
如有违反,按照公告处理!!!
  • 联系QQ客服
  • 添加微信客服

联系DZ插件网微信客服|最近更新|Archiver|手机版|小黑屋|DZ插件网! ( 鄂ICP备20010621号-1 )|网站地图 知道创宇云防御

您的IP:3.144.230.199,GMT+8, 2024-9-8 09:27 , Processed in 0.220901 second(s), 49 queries , Gzip On, Redis On.

Powered by Discuz! X5.0 Licensed

© 2001-2024 Discuz! Team.

关灯
扫一扫添加微信客服
QQ客服返回顶部
返回顶部