这里将全面的介绍这个框架给我们开发带来的好处,让你们对它有更深层次的认识,喜欢或不喜欢的,欢迎大家前来留言讨论

一、目录层次结构

现在很多的项目,特别是大一点的项目里面,都会有很多的人参与,要进行程序查询找、修改或是升级扩展的时候,目录结构一目了然就显得很重要了,更重要的是后面的人来接手的话,目录结构不清楚,程序结构很乱的话,那估计接手的人只有哭了

下面就是tpframe的框架目录结构,是不是很干净

每个目录结构:

addon:插件目录

application:应该模块目录

coreframe:核心程序目录

data:运行时目录(缓存、上传文件等)

extend:扩展目录(保留),为了保持tp5程序扩展的风格,如果你习惯tp5的开发风格,你也可以在这里面扩展

theme:模板目录(前台、后台)

是不是很一目了然,各个功能模块都很清楚分开存放呀

二、程序分层结构

分层并不是tpframe弄出来的,而是把tp5的分层给充分利用起来,当然我这里不是说的程序框架模式,经典的还属MVC,那当然还有其它模式,像MVP,MVVM,CBD,ORM等等

我这里要说的是MVC更细化分层,每层的在功能设计中所起的作用,为什么要这样设计等问题

我也看到过CV模式,有部分人就推崇这种简单直接的模式,其实这种就相当于原生PHP再升级一下而已,把逻辑相关独立出去,当然我想的是他们喜欢这种的目的就是觉得简单,直接了当,有人说程序执行更快?加载的东西少?

哈哈,如果仅仅是为了速度问题,原生比什么框架都快,不是吗。所以讨论到这个问题你就输了(别太认真),一个框架好与不好,个人觉得应该从如下方面来参考

?可读性好不好(换一个人能不能快速的入手)

?可维护性好不好

?程序可扩展性好不好

?程序之间耦合度是否达到尽可能的低

?重复代码是否将到最低

......

说了这些我就会问,原生PHP能做到上面的某些方面么,就拿CV模式来说,如果一个逻辑代码成千上万行了,改起来估计难度很大吧,动不动出错了怎么办,要在中间加一块功能,换一个人估计都不敢改了。

那么TPFrame框架的分层结构是怎么样的呢?我先来说一个公司的事务处理流程

首先是公司的前台人员,如果有外来人员(浏览器),简单的事情(不进行数据处理)直接回复就可以,如果要设计到公司重要的事情,她们便把事情通报给相应的部门(对应的部门,为客户服务的)来处理,每个部门处理重要事情总得要领导决策的吧(最终数据处理),然后再原路返回,再由前台人员把反馈结果给外来人员(浏览器),所以就得到了如下分层结构

1)、controller:控制层,控制转发,相当于前台

2)、service:服务层,为数据处理而服务器,出问题,回滚,数据拦截,验证等,相当于各部门

3)、logic:逻辑层,数据处理层(CURD操作),相当于领导

4)、view:视图层,这便是最张呈现给客户的方案

当然为了数据的更细化,规范化,还少不了其它的层

5)、model:模型层,数据自动处理(数据自动完成、数据修改),其实真正的数据处理层就是它

6)、validate:验证层,数据在进行CURD之前的验证操作可交给它

你们可去看thinkphp文档,这些层都是有的,只是它介绍的不是那么的详细。

当然有人说了,这样开发起来好复杂哦,当然,对于一些最终都是很简单的项目,可以认为它是有点复杂的,但对于 一个长期项目,以后要扩展,升级,维护的项目,这种分层绝对是有必要的。当然这样分层也减少了代码之间的耦合度。

三、程序代码结构

现在的很多项目需求都是各端都要求(app\mobile\pc),而在开发的时候,分三批人分别开发也好,一批人按计划开发也好,写好一套再写一套,还是各写各的一套。。。我们都知道,不管是app也好,mobile或pc,一个项目,他们的展示数据大部分都是相同的,也就是说他们对数据处理的大部分功能都是相同的,倘若是分开写的话,就会有大量的代码重复,以后升级三端都是加,改也要全改,维护起来更是老火。

那么针对这种tpframe给出来的解决方案(建议):

1)、逻辑共用(放公共模块),当然除非你肯定这个功能只有这个模块要使用,你就可以写在当前模块里面

2)、服务层各模块,因为模块(部门)对数据的处理可能不一样(领导下达的任务),例如app可能要规范一定的数据,返回数据为json格式 ,而pc则不一样

3)、控制器各模板,因为不同端的入口可能不一样

这里主要在逻辑层,因为它是最重要的,也是处理比较频繁的,它共用后,以后维护,升级都方便了。

四、程序扩展方式

用过微擎系统的人肯定就知道,它的系统是通过插件的形式过行一步一步的扩展的,而这些插件是完全独立的,这样便可以以插件的形式对系统进行任意功能的扩展了,但我发现它的插件里面有大量重要的代码,几个大的插件下来,动则几百M,大则几G,太臃肿。

tpframe同样实现了插件扩展系统的功能,而且进行了升级,各插件大量重复的功能模块可独立出来,每个功能模块都可以插件的方式进行开发

tpframe插件分类:

1)、行为插件

该插件开发好后,只须要在须要显示的地方放置钩子即可,以后只须要在后台开启与关闭来控制。

好处:钩子放置可以在未开发插件功能前放置,以后须要的时候再开发也可以;在不改变前端代码的情况下可自由开发插件

例如:编辑器插件、登录插件

2)、模块插件

该插件类似于thinkphp5的一个单独模块功能,它可以是独立的,有自己的数据管理功能

例如:cms插件、短信插件

3)、行为模块插件

它是行为插件与模块插件的组合

也就是说它也可以放置钩子,同样也有后台数据管理功能

例如:幻灯片插件

插件可简单的进行安装与卸载

OK ,这就是tpframe开发项目的一些优点吧,再说明它不是cms系统,它是thinkplhp5的升级版,如果你觉得不错,欢迎下载使用,开源免费的哦;如果你有独到的见解,欢迎留言

透析thinkphp5升级版开发框架tpframe的更多相关文章

  1. Ruby设计模式透析之 —— 适配器(Adapter)

    转载请注明出处:http://blog.csdn.net/sinyu890807/article/details/9400153 此为Java设计模式透析的拷贝版,专门为Ruby爱好者提供的,不熟悉R ...

  2. Ruby设计模式透析之 —— 组合(Composite)

    转载请注明出处:http://blog.csdn.net/sinyu890807/article/details/9153761 此为Java设计模式透析的拷贝版,专门为Ruby爱好者提供的,不熟悉R ...

  3. OpenCV4Android释疑: 透析Android以JNI调OpenCV的三种方式(让OpenCVManager永不困扰)

    OpenCV4Android释疑: 透析Android以JNI调OpenCV的三种方式(让OpenCVManager永不困扰) 前文曾详细探讨了关于OpenCV的使用,原本以为天下已太平.但不断有人反 ...

  4. lambda匿名函数透析

    lambda匿名函数透析 目录 1       匿名函数的作用... 1 2       匿名函数的格式... 1 3       匿名函数实例代码... 3   1         匿名函数的作用 ...

  5. 透析ARP原理

    对于ARP协议, 我本来是不了解的,只是解决了两个ARP相关的P2的Bug后,也就懂了.本文将从原理的角度对ARP做一个透析. 1. 什么是ARP? ARP(Address Resolution Pr ...

  6. java--序列化及其算法透析

    有关Java对象的序列化和反序列化也算是Java基础的一部分,下面对Java序列化的机制和原理进行一些介绍. Java序列化算法透析 Serialization(序列化)是一种将对象以一连串的字节描述 ...

  7. Excel数据分析 --数据透析表

    数据透析表主要用于各种数据总汇,对各项数据指标进行分类统计 实例分析 如下所示:是一份销售流水数据,有时间,地区,销售员,商品名称,数量,单价和金额几个字段,如下所示: 现在针对不同的数据汇总需求,可 ...

  8. thinkphp5升级版开源框架tpframe v2.1发布

    免费开源框架tpframe是一款以thinkphp5为驱动,在此基础上进行进一步的完善与改进的框架,保持了ThinkPHP5原有的所有特性,优化核心,减少依赖,为个人或企业建站提供高效.快速解决的方案 ...

  9. SOFA 数据透析

    数据透传: 在 RPC调用中,数据的传递,是通过接口方法参数来传递的,需要接口方定义好一些参数允许传递才可以,在一些场景下,我们希望,能够更通用的传递一些参数,比如一些标识性的信息.业务方可能希望,在 ...

随机推荐

  1. mongodb一些使用技巧或注意事项记录

    1.有的时候需要删除指定字段那一列,使用update操作.例如要删除name这一列: query  json: {"name":{$exists:true}} update jso ...

  2. 【linux】安裝 PHP时出现error: Cannot find MySQL header files

    checking for specified location of the MySQL UNIX socket... no checking for MySQL UNIX socket locati ...

  3. hi3531 SDK 编译 uboot, 修改PHY地址, 修改 uboot 参数 .

    一,编译uboot SDK文档写得比较清楚了,写一下需要注意的地方吧. 1. 之前用SDK里和别人给的已经编译好的uboot,使用fastboot工具都刷不到板子上.最后自己用SDK里uboot源码编 ...

  4. RHEL部署ipa红帽身份验证

    1.先下载必须包 yum install -y ipa-server bind bind-dyndb-ldap 2.初始化ipa基本配置 ipa-server-install * Configure ...

  5. 转:SQL进阶之变量、事务、存储过程与触发器

    一.变量那点事儿 1.1 局部变量 (1)声明局部变量 DECLARE @变量名 数据类型 DECLARE @name varchar(20) DECLARE @id int (2)为变量赋值 SET ...

  6. C#图解教程 第二十章 异步编程

    笔记 异步编程 什么是异步 示例 async/await特性的结构什么是异步方法 异步方法的控制流await表达式取消一个异步操作异常处理和await表达式在调用方法中同步地等待任务在异步方法中异步地 ...

  7. mfc100u.dll下载和使用方法

      当运行软件或游戏时,系统提示"丢失mfc100u.dll"."没有找到mfc100u.dll"等类似错误信息. 请下载本站提供的dll文件,使用它可以帮助用 ...

  8. [SDOI2010]粟粟的书架

    题目大意: 网址:https://daniu.luogu.org/problemnew/show/2468 大意:本题有两问: [1] 给定一个\(R*C\)的带权矩阵,询问\(2×10^5\)次在一 ...

  9. Vue-生命周期图示 注解

    根据腾讯课堂视频讲解,将官网生命周期图示进行注解,以加深印象和理解 贴一个源码示例: 注意位置和写法

  10. python-kafka实现produce与consumer

    1.python-kafka: api送上:https://kafka-python.readthedocs.io/en/latest/apidoc/KafkaConsumer.html 2.实现一个 ...