azonmedia/guzaba2

适用于 swoole 的 PHP 框架

v0.0.5 2020-07-31 07:01 UTC

README

概述

Guzaba2 是一个研究型框架。它探索了嵌套事务和自动(部分)回滚的使用,不同的设计模式和实现。它不打算在生产环境中使用(可能永远不会),目前还没有文档。Guzaba2 的测试平台是 Guzaba 平台。该框架具有与其他框架(它借鉴了 Slim 的代码)相似的某些特性,但在其他方面非常不同。如果您想讨论框架中的某些特性或设计决策,请打开 讨论

Guzaba2(以及 Guzaba1)的创建是因为没有其他框架提供以下功能:

  • 嵌套事务 - 支持部分事务回滚,事务可以继续并提交
  • 自动事务回滚 - 无论是因为异常还是返回(SBRM)而放弃作用域
  • 各种事务事件的回调 - 您可以添加条件块,如果当前(无论是主事务还是嵌套事务)提交或回滚
  • 回滚原因 - 在您的回调块中,您可以检查事务为何回滚 - 明确或隐式地由于异常或返回
  • 您还可以获取使您的交易回滚的异常,无论异常是否被捕获
  • ActiveRecord 对象事务 - 如果事务回滚,对象将自动更新其属性(如果需要,您仍然可以保存它们!)
  • 事务和事务管理器可用于实现自定义事务(如文件系统事务)

Guzaba2 在以下方面进行了改进并增加了支持:

  • Swoole 基于的
  • 数据库连接池
  • 自动释放获得的资源/连接(SBRM)
  • ORM 对象的共享内存 - ActiveRecord 对象是所有协程之间共享数组数据的指针
  • 与 Guzaba1 相比,更好的 ACL 支持 - 对于对象和类/静态方法
  • 许多速度优化(由 Swoole 的持久内存模型实现) - 所有一切都作为本地内存中的原生对象保留!无需序列化和反序列化!
  • 并行异步查询和操作(归功于 Swoole 协程)
  • 它可以在不到 1 毫秒的时间内返回响应!(《GuzabaPlatform》与《request-caching 组件》)这不是基于时间或过期的缓存,而是基于实际业务逻辑的缓存(各种对象/记录的更新时间以及可以和不可以缓存的项)!
  • 具有调试器(通过 telnet)

以及一些常见功能

  • PSR-7,PSR-11,PSR-15,PSR-3(即将支持 PSR-14,PSR-16 和 PSR-17)
  • ActiveRecord 带有时间记录和日志,多个后端存储
  • ActiveRecord 属性钩子(设置,获取,验证)和方法钩子(保存前,保存后等)
  • ACL 权限
  • 事件
  • 路由
  • 注册
  • 依赖注入
  • 缓存(内存,redis,memcached)

以及一些特定功能

  • 使用类型属性(PHP 7.4),联合类型,命名参数,属性(PHP 8.0)
  • 当前 Guzaba2 仅支持 MySQL 和 Redis,因为这些是 Swoole 支持协程的唯一数据库驱动。
  • 随着 Swoole 为 PostgreSQL 提供了一个单独(支持度较低)的驱动程序,将添加对 PostgreSQL 的支持。
  • ActiveRecord 对象的 MySQL 存储在内部使用 ID 以提高性能,而对于 API 访问则支持 UUID。
  • 后端存储功能支持替换 ActiveRecord 对象的存储,但当前存在一些 SQL 特性,将阻止它与 NoSQL 数据库一起工作。这将在未来得到解决。
  • 目前没有数据库迁移支持,但将在未来添加。
  • 一切都是 ActiveRecord,包括模型、日志条目、控制器、权限。
  • 可以在对象(记录)和类(静态方法)上授予权限。
  • 尽可能避免使用工厂。
  • 使用魔法方法和引用。
  • 使用静态代码进行配置。在启动时生成注入配置常量的类。

以下是不支持(可能永远也不会支持)的内容:

  • 该框架的目标不是取代 SQL,因此不支持使用替换语言创建 SQL 查询或使用查询构建器创建查询。它支持 ActiveRecord,但不支持像 Doctrine 这样的完整 ORM 实现。原因是这类项目(大型、复杂,依赖于数据库特定细节)无法避免手动编写和优化(非常)大的查询,而 SQL 语言擅长其本职工作。不支持从一家供应商迁移到另一家供应商的数据库迁移(因为该软件依赖于数据库的特定细节)。
  • 没有基于 PHP 类/结构的自动模式生成。逻辑相反——该框架根据数据库模式配置/生成类。

总体而言,该框架的目的是不模糊或隐藏后端存储的细节,而是使其更容易使用,并减少与使用相关的错误。Guzaba2 通过基于 Swoole 并充分利用其持久内存模型和协程,增加了出色的速度和非常高的并发支持。

要求

  • PHP 8.0+
  • Swoole 4.5+
  • MySQL 8.0+

安装

文档

文档可在此处找到。

使用 Guzaba 2 的软件