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

一、目录层次结构

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

下面就是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. SPI FLASH与NOR FLASH的区别?

    1.SPI Flash (即SPI Nor Flash)是Nor Flash的一种: 2.NOR Flash根据数据传输的位数可以分为并行(Parallel)NOR Flash和串行(SPI)NOR ...

  2. 项目部署到Tomcat报错

    1.今天晚上,我想把dojo项目部署到Tomcat中,结果发现部署不了,Tomcat报错.而且,这个错误白天时也碰到了. 错误具体详细如下: Publishing failed with multip ...

  3. List转换成JSON对象报错(三)

    List转换成JSON对象 1.具体错误如下 Exception in thread "main" java.lang.NoClassDefFoundError: net/sf/e ...

  4. Linux查看目录中的文件

    Linux查看目录中的文件 youhaidong@youhaidong-ThinkPad-Edge-E545:~$ ls examples.desktop jdk 公共的 视频 文档 音乐 java ...

  5. python空字典列表两种生成方式对赋值带来的不同影响

    最近在实现朴素贝叶斯算法碰到一个很有趣的现象(基于Python3.6.3) 我生成一个由10个空字典构成的列表: 第一种生成方式(可能大多数人都会用这种方法,形式简单) >>a = [{} ...

  6. JavaScript设计模式(7)-设配器模式

    适配器模式 1. 作用: 协调两个不同的接口 2. 适用场景 适配器适用于客户期待的接口与现有 API 提供的接口不兼容这种场景.他只能用来协调语法上的差异问题.适配器所适配的两个方法执行的应该是类似 ...

  7. RobotFramework下的http接口自动化Get关键字的使用

    在使用Create Http Context关键字创建了http的调用环境后,就可以使用Get关键字来发送一个http协议中最常用的get请求了. Get 关键字只接受一个url参数,该关键字的API ...

  8. Linux入门——开机启动过程浅析

    Linux开机启动过程浅析 Introduction 开机启动过程分为以下6个步骤,分别是BIOS, MBR, GRUB, Kernel, Init, RunLevel, RunDefinition ...

  9. 彻底禁用Chrome的“请停用以开发者模式运行的扩展程序”提示

    前言 作为一个前端程序员,难免会有一些专属自己的小扩展,没必要每一个都发到Chrome应用商店去,虽然可以勾选"开发者模式"来运行本地插件,但是每次启动都会有一个烦人的" ...

  10. 【网络流24题】最长k可重区间集(费用流)

    [网络流24题]最长k可重区间集(费用流) 题面 Cogs Loj 洛谷 题解 首先注意一下 这道题目里面 在Cogs上直接做就行了 洛谷和Loj上需要判断数据合法,如果\(l>r\)就要交换\ ...