这是一个用于中小型团队开发的框架
一个简单的个人博客bybzmt/blog.php
基于此框架的个人博客bybzmt/blog.php有非常强大的性能
| 模式 | 静态文件 | 首页(2篇博客) | 首页(10篇博客) |
|---|---|---|---|
| Fpm | 4705 | 1507 | 1237 |
| Swoole | 26607 | 3276 | 2084 |
├── assets 资源目录(如:字体文件等)
├── config
│ ├── dev 开发环境配置
│ ├── product 生产环境配置
├── index.php 项目入口
├── library 其它与composer不兼容的库
├── src
│ ├── Admin 管理后台
│ ├── Api app接口端
│ ├── Backend 内部(内网)接口
│ ├── Common 公共代码目录
│ ├── Console 控制台
│ ├── Wap 手机Web端
│ └── Web Web端
├── static
│ ├── admin 后台静态文件
│ └── web Web端静态文件
├── tests 单元测试目录
├── var 可读写目录(如:模板缓存等)
└── vendor composer库
由于Swoole是一种常驻内存模式,全局变量的生命周期是应用级,而不同于fpm模式下只是请求级的。 全局变量能在不同请求间保持,所以$_GET、$_POST等原方法都不能用了。 这里框架给每个请求实例化一个Context对像,将所有跟当前请求相关的数据存到Context对像中。
Context对像还负责组件按层级加载和替换功能。
如上面博客中:
当初始化组件时Context对像会首先在自己的命名空间中寻找对应组件,如果没找到则让父级Context进行初始化。 这样子可以很方便的扩展和替换自己所需要的组件。
api:
Request对像是直接使用的swoole_http_request
Response对像同样是直接使用swoole_http_response
在Fpm模式中框架实现一个兼容层保持了和Swoole中一样的api
框架里把所有跟Context对像有关的对像都实现为了Component, 主要是提供快速实例化功能,不需要反复传递Context对像。
另外Component也现实了一些便捷方法方便在任意组件内使用。
路由并没有采用开放式映射式的,而是采用了注册式路由,优点是路由比较干净。
路由项目位于bybzmt/router.php
如果不喜欢可以替换为你喜欢的库,框架替换组件非常简单。
框架推荐使用领域模型模式,使用: Service、Table、Row(Domain)结构
需要注意的是不要把数据展示的工作写到Service、Table、Row中去,它位只负责提供最基本的数据, 按页面、api要求组织对应的数据结构应该在控制器、视图中实现
数据库分为提供基础功能的Table类,提供分表功能的TableSplit类。 另外有提供缓存功能的TableRowCache trait。 任何用户的表应都该继承于Table或TableSplit类,并当需要缓存时引入TableRowCache trait即可。
注意分表和缓存都只是对Table类中的get/gets/insert/update/delete这几个操作进行了支持。 当用SQL直接进行数据操作时需要手动维护相关缓存或分表功能。
框架提供了LazyRow加载方法,当实例化时只是记录id,到访问属性才再试图批量加载。
框架提供了一些常用功能方便使用
这个缓存跟上面Table中的缓存没有关系,它是指用户自己维护的缓存。 尽量让不同类型的缓存用不同的类去管理,避免key冲突。
框架没有提供模板功能,建议直接使现现有第三方模板程序。(如:Twig)
框架的各功能并没有想适应所有环境,只需要在80%情况下可用就行了,特殊情况在具体的项目中可以特殊处理。
框架的代码不多,如果想用尽量把代码都读一遍。