对主流框架不感冒,想开发属于自己的框架,寻求不同见解或同好朋友

2017-07-17 00:13:36 +08:00
 gavinczhang

simple 框架

simple 框架(github)是一款简单、高效、易用的 PHP 开发框架。

为什么要有 simple 框架

从 0 到 1

基于上述逻辑,整理下一个框架所需要实现的功能,及所有功能所需要的积累。

设计思路

我认为作为一个后端底层框架,只需要为开发者提供最核心最常用的功能即可,其中包括:

框架架构图

涉及技术

composer

composer 是 PHP 用来管理依赖( dependency )关系的工具。可以在自己的项目中声明所依赖的外部工具库( libraries ),Composer 会安装这些依赖的库文件。

基于 composer 开发的代码,可以让使用房快速加入自己的项目中,且可以很好的管理需要使用的版本。另外框架约定好按 PSR-4 规范后开始开发,可以省去了 autoload 的工作量(当然是有代价的,曽压测过使用 composer 的 autoload 和自己实现 autoload 的性能大概相差 15%,但是当项目足够大,需要依赖的外部资源足够多时,这个差距会逐渐的缩小)。

错误机制

保证框架运行过程中的健壮性,当框架捕获到相关异常,允许用户自定义异常处理方法,可以快速开发出满足自己业务逻辑的功能模块(例如快速实现 404/500/异常上报等功能),以及调试模式下快速定位问题。

config

用于快速读取配置文件,通过定义的预定义常量自动读取对应环境的配置。

route/mvc

route 即路由机制,通过 url 匹配一段规则后,找到对应处理的类和函数。 MVC 为模型-视图-控制器模式,用一种业务逻辑、数据、界面显示分离的方法组织代码,已经成为 web 开发的必会标准模式。

request/response

深入了解 HTTP 协议的 request 和response

DB/ORM

选用 mysqli 或 pdo 实现 DB 的基本 query/fetch/insert_id 等操作。 在此基础上,实现 SQL 语句的快捷构造封装 SQL builder (将数组生成对应 SQL 语句)。 在此基础上,实现 ORM (对象-关系映射)的基本封装

CLI

在日常的开发工作中,定时脚本任务的开发必不可少,因为便捷的开发基于 CLI 模式运行的脚本也是必须要满足的条件。

cookie/session

Log/curl/Iptable/redis 等锦上添花的类库

Log 用于调试开发等方便打印日志输出。 日常工作中经常需要发送一些 http 请求到特定服务器,或从某服务器拉取相关数据,curl 使用率非常频繁。 在提供纯接口 server 时,对 ip 段限制的需求会经常遇到。 redis 发展到今天,无论是做缓存,还是作为稳定可靠的 DB 提供服务都毫无问题。

写在最后

目前 simple 框架不断优化、调整,已经迭代至 4.0 版本,有了近两年时间的思考和积累,某些代码的实现确实需要改进,因此有了 5.0 版本的规划和思考。准备将 5.0 版本开发过程中的一系列问题一一记录在案,并对 route、DB build、curl 等一些类库的封装思路进行详细的说明。

我也希望能有认同我观点的朋友参与进来一同思考、讨论、开发,也希望有不同观点的朋友能提出各种批评或者建议,让我们共同探讨技术,一同进步。

欢迎各种吐槽。 原文地址

6263 次点击
所在节点    PHP
44 条回复
voocel
2017-07-17 01:38:06 +08:00
deepkolos
2017-07-17 01:58:49 +08:00
自己造过一个小小框架 , 不过各各部件的抽象成都不高, 属于过程的复用级别 , 大量使用魔术方法 get set 并借此实现了一个函数级别的 Hook 机制, 然而并无卵用属于过度设计... 感觉框架的意义在于把一些任务变成写配置文件

还有前后端的分离 , 后端 view 层感觉变成了前端的 model 层了, 还有后端的 Route 也不是对应页面了

这是我的小小框架的造出来的东东~玩具级的~ http://weibao.deepkolos.cn
shiji
2017-07-17 02:15:07 +08:00
造轮子喜闻乐见。 以后能不能流行不重要,这一路估计能积累不少经验
sagaxu
2017-07-17 06:12:22 +08:00
你这性能测试结果诡异,我测过 laravel 跑 helloworld 都能 2000rps 了,yaf 才 1000 多?
acthtml
2017-07-17 07:14:41 +08:00
php 框架我只服 drupal
mytsing520
2017-07-17 07:59:51 +08:00
适合自己的,才是最好的
askfilm
2017-07-17 08:47:44 +08:00
干嘛要费这个事造轮子, 有这功夫,symofny 早学会了,现在早就弱化框架这种东西了 , 组件构造一切
littleylv
2017-07-17 09:19:11 +08:00
造轮子这事,如果是兴趣爱好使然,或者是为了学习、提高自己等出发,非常不错,值得肯定。
否则,有轮子为啥不用?
hzw94
2017-07-17 09:25:22 +08:00
厉害厉害
zhongkouwei
2017-07-17 09:32:34 +08:00
@askfilm 造轮子这个过程很重要吧,可以学到很多东西
zhengwenk
2017-07-17 09:36:47 +08:00
一般想造轮子只有 2 种情况。1、见识不够,觉得自己是天才。2、真的是天才。我觉得楼主属于后者。
loadinger
2017-07-17 09:37:35 +08:00
感觉 DI、IoC 还是有点意义的.但是这都搞了,为什么不用 laravel....就当学习吧.支持楼主 .
gavinczhang
2017-07-17 09:52:15 +08:00
@sagaxu 跟机器配置的 fpm 运行数等有关,不过在同样配置环境下看两者差距即可。另外当时压测时没有开启 opcache
codermagefox
2017-07-17 09:54:05 +08:00
@zhengwenk 为了学习造轮子的看了看不敢说话
Immortal
2017-07-17 09:55:50 +08:00
收藏下 准备有空看下楼主代码学习
dinghua
2017-07-17 10:12:59 +08:00
不敢说话
juneszh
2017-07-17 10:18:02 +08:00
flight+composer 做 RESTful 杠杠的
sagaxu
2017-07-17 10:23:47 +08:00
@gavinczhang 不开 opcache 的压测毫无意义,理由如下

1. 编译代码的开销不小,且生产环境都没有这个开销
2. 100000 行代码的框架和 1000 行代码的框架,即便执行了相同的 100 行,编译开销却差百倍
gavinczhang
2017-07-17 10:35:27 +08:00
@sagaxu 是的,近期我重跑一次
slion
2017-07-17 11:05:39 +08:00
收藏,下载来学习下

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/375784

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX