PHP组件化开发
设计思想中有两种极端:大而全、小而美。
一般我们常用的库是小而美,用的框架是大而全。从Symfony实现Component式开发开始,框架的组件化逐渐成为趋势。我们可以任意的组合各种Compoent来形成自己的PHP框架,比如B团队出的Db及ORM引擎、B团队出的缓存引擎、E团队出的Route映射引擎、C团队出的DI、D团队出的MVC、X团队的单元测试工具。Composer出现后,提供了高度便捷性,加速了这种趋势。
Yii这个框架是典型的全栈式框架,常规应用开发所需功能几乎都揉和到一个项目中。yii2到现在,它的核心实现还是以传统Web应用场景为重心。但这只是他的形,他的核心思想里是组件化的,有Component这样的完善机制,只是没有拆开成各个子项目而已。
如何将Yii2这样的项目拆成Component式的子项目呢,你可以自己想想!
代码重用据说是OOP思想最想要解决的问题?如果我们写出的每个功能,抽象的库、具体的业务模块,都可以实现最大化独立和重用,似乎是很美好的一件事情,借助于开源的趋势,若干年的积累后,只要像搭积木一样组合一下,就可以完成满足实际需求的应用系统。
请注意上文中的“搭积木”这个词,搭积木源自于孩童时的游戏,不同的积木组合可以拼成各种房子、各种车等,但积木组合出来的都是人所处环境的实物,和应用系统这种存在于计算机世界的事物在目前的认知上是完全不同的体系,搭积木这个词用在应用开发上,合适吗?
通常我们的结论是这样:代码可以以库的形式重用,重复的功能模块式开发和引用,但不同的应用有不同的场景,还是需要以比较“巧妙”的方式去定制的,比如“钩子”、“行为”、“事件”、“插件”等。
话再说回来,组件化可以到什么程度呢?
市面上成功的CMS等系统都通过“插件”或“扩展”,配合“应用市场”建立了比较强大的开发者生态圈,通过“巧妙”的机制实现具体场景的定制化,满足用户的需求。
举个简单的例子来说,TP的Model是这样的:
在具体的Model里如UserModel,覆盖
// 删除数据前的回调方法
protected function _before_delete($options) {}
// 删除成功后的回调方法
protected function _after_delete($data,$options) {}
这两个方法以实现数据删除前和删除后触发的关联操作,但Yii中,只要继承Component基类实现的类,都可以使用事件和行为来扩展原来的逻辑,而且可从外部来定义,非常灵活。
yii中的用法大致为:
$model = new User;
$model->on(‘before_delete’, $callabe, $data);
TP的控制器中也有钩子,应该也算是一种实现方式吧。
库Component化、业务功能以模块化的方式实现,就可以实现扩展和定制的无限可能性。
PHP组件化开发的更多相关文章
- vue.js组件化开发实践
前言 公司目前制作一个H5活动,特别是有一定统一结构的活动,都要码一个重复的轮子.后来接到一个基于模板的活动设计系统的需求,便有了下面的内容.借油开车. 组件化 需求一到,接就是怎么实现,技术选型自然 ...
- ReactNative新手学习之路04 组件化开发轮播图swiper支持安卓和IOS
react native 新手之路04 组件化开发轮播图swiper支持安卓和IOS npm install react-native-carousel --save git 地址Properties ...
- Webpack+Vue+ES6 前端组件化开发mobile-multi-page应用实战总结
本文版权归博客园和作者吴双本人共同所有 转载和爬虫请注明原文地址 www.cnblogs.com/tdws 一.写在前面 项目上线有一段时间了,一个基于webpack+vue+ES6的手机端多页面应用 ...
- Android组件化开发的简单应用
组件化开发的主要步骤: 一.新建Modules 1.新建Project,作为应用的主Module. 2.新建Module:"Common",类型选择"Android Li ...
- 前端笔记之JavaScript面向对象(四)组件化开发&轮播图|俄罗斯方块实战
一.组件化开发 1.1组件化概述 页面特效的制作,特别需要HTML.CSS有固定的布局,所以说现在越来越流行组件开发的模式,就是用JS写一个类,当你实例化这个类的时候,页面上的效果布局也能自动完成. ...
- vue(9)—— 组件化开发 - webpack(3)
前面两个终于把webpack相关配置解析完了.现在终于进入vue的开发了 vue组件化开发预热 前期准备 创建如下项目: app.js: footer.js: main.js: webpack.con ...
- vue(8)—— 组件化开发 - webpack(2)
webpack的常用loder和插件 loder和插件是什么,现在暂且不表,看到后面你就懂了 引入css问题 直接用link标签导入css 在前面的 vue(7)—— 组件化开发 — webpack( ...
- AppBoxFuture(六): 前端组件化开发
前面几篇都是在介绍结构化与非结构化的数据存储,本篇换换口味介绍一下框架是如何实现前端组件化开发的.首先得感谢Vue.ElementUI等优秀的前端开源项目,这些项目帮助作者快速实现了框架的两个前端 ...
- 如何理解Unity组件化开发模式
Unity的开发模式核心:节点和组件,组件可以加载到任何节点上,每个组件都有 gameobject 属性,可以通过这个属性获取到该节点,即游戏物体. 也就是说游戏物体由节点和组件构成,每个组件表示物体 ...
- Android项目实战(四十八):架构之组件化开发
什么要组件化开发? 看一下普通项目的结构 , 一个项目下有多个Module(左侧图黑体目录),但是只有一个application,0个或多个library(在每个medel下的build.gradle ...
随机推荐
- swift NSComparator
var cmptr:NSComparator = {(obj1:AnyObject!, obj2:AnyObject!) -> NSComparisonResult in if((obj1[&q ...
- 第十六回 IoC组件Unity续~批量动态为Unity添加类型和行为
回到目录 之前的一篇Unity的文章主要是基本的实现,并没有什么特别的地方,使用Unity可以方便的实现应用程序的IoC控制反转,这给我们的应用程序在耦合度上变得高了,同时可测试性加强了,当然,这些的 ...
- DDD~领域层
回到目录 再论Domain与Infrastructure 在面向领域的设计中,领域层(Domain)实现上是位于最底层的,其它层有对它的引用,包括基础设施层(Infrastructure)也是去引用领 ...
- 用VC编译lua源码,生成lua语言的解释器和编译器
用VC编译lua源码,生成lua语言的解释器和编译器 1.去网址下载源码 http://www.lua.org/download.html 2.装一个VC++,我用的是VC6.0 3.接下来我们开始编 ...
- [转载] fail-fast总结(通过ArrayList来说明fail-fast的原理、解决办法)
说明: 转载自http://www.cnblogs.com/skywang12345/p/3308762.html概要 前面,我们已经学习了ArrayList.接下来,我们以ArrayList为例,对 ...
- piap.windows io 监测attilax总结
piap.windows io 监测attilax总结 当硬盘光狂闪的时候. 主要目标:找出哪个进程占用io最多, 作者Attilax 艾龙, EMAIL:1466519819@qq.com 来 ...
- Jasmine入门(结合示例讲解)
参考: http://www.cnblogs.com/wushangjue/p/4541209.html http://keenwon.com/1191.html http://jasmine.git ...
- 关于sass的介绍和基本语法
引入 什么是sass?sass是css预处理器. 那预处理器又是什么?css本身不是一种编程语言,而预处理器是用一种专门的编程语言,进行网页样式设计,然后再编译成正常的CSS文件. 如今主流的预处理器 ...
- Oracle 11g系列:数据表对象
Oracle数据库的下一层逻辑结构并非数据表,而是表空间.每个数据表都属于唯一的表空间. 1.Oracle表空间 与数据表相同,Oracle表空间是一个逻辑对象,而非物理对象,是数据库的组成部分.当使 ...
- 为什么MVC不是一种设计模式
http://damoqiongqiu.iteye.com/blog/1949256 ---比较Backbone和Ext4.x在MVC实现上的差异 大漠穷秋 前言 圣人云:不想做妈咪的小姐不是好码农. ...