QueryPHP V1-beta.5 改进 ORM 设计体验 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
doyouhaobaby
V2EX    PHP

QueryPHP V1-beta.5 改进 ORM 设计体验

  •  
  •   doyouhaobaby 2019-09-10 11:40:46 +08:00 4933 次点击
    这是一个创建于 2226 天前的主题,其中的信息可能已经有所发展或是发生改变。

    QueryPHP v1.0.0-beta.5,这个版本主要改进 ORM 和大量细节的优化。

    关于 QueryPHP

    QueryPHP 是一款现代化的高性能 PHP 渐进式协程框架, 我们还是主要面向传统 PHP-FPM 场景,以工程师用户体验为历史使命,让每一个 PHP 应用都有一个好框架。

    百分之百单元测试覆盖直面 Bug,基 Zephir 实现框架核心常驻,依托 Swoole 协程提升业务性能,此刻未来逐步渐进。 我们的愿景是USE LEEVEL WITH SWOOLE DO BETTER, 让您的业务撑起更多的用户服务。

    更新日志

    • [ framework ] 将底层 redis 服务拆分出来注册到 IOC 容器,可以方便使用
    • [ framework ] 删除自己的 dd,dump 调试函数,Symfony 自带不需要再弄了。
    • [ framework ] 移除全局函数 app,hl 助手函数,由静态代理实现 App (别名 Leevel )来,App::path(),App 可以访问 IOC 容器中的方法 App::make('request')。
    • [ framework ] 删除代理中所有接口设计 \Leevel\Kernel\Proxy\IApp,删除组件中的 Proxy 改为用 @method 来实现 IDE helper,并内置一个用于生成这样的命令工具自动生成。
    • [ framework ] 优化 swoole 热重载代码,利于测试。
    • [ framework ] 改进系统异常处理组件,例外将系统内置异常改为 abstract 方便业务层继承更好地处理异常,添加一个业务处理异常 \Leevel\Kernel\Exception\BusinessException,异常响应也会经过中间件处理。
    • [ framework ] 核心 kernel 和路由支持对 CORS options 请求的处理,利用自定义中间件轻松处理跨域访问问题,分拆路由绑定解析方法,代码更清。
    • [ framework ] 关联模型,改进 ORM 关联查询源值为空的特殊处理 ,不再执行后续查询,减少数据库查询,修复嵌套关联预载入查询未执行到的 BUG。
    • [ framework ] 为各个组件助手函数添加一个静态访问,分拆各个组手函数到单独的文件方便 f 调用。
    • [ framework ] 实体添加更多 const 如 CONSTRUCT_PROP_WHITE,MIDDLE_SOURCE_KEY 避免写死实体一些约定的名字。
    • [ framework ] 数据库 PDO 查询改进,该是数字就返回数字,不再全部返回字符串。
    • [ framework ] 查询新增 where('foo', '=', null) 的支持,处理非常特殊场景,以前直接报错。
    • [ framework ] 改进实体 \Leevel\Database\Ddd\Entity toArray 设计,现在 null 会被自动忽略。
    • [ framework ] 改进实体 \Leevel\Database\Ddd\Entity 属性相关设计,withProps,withProp,hasProp,prop 来访问。
    • [ framework ] 改进实体 \Leevel\Database\Ddd\Entity 软删相关设计,实体一旦定义了 const DELETE_AT,系统查询和删除自动走软删除,也可以通过 withSoftDeleted 查询包含软删除的数据,forceDelete 强制删除。
    • [ framework ] 改进实体 \Leevel\Database\Ddd\Entity 中查询实体 find($id) 改为 findEntity($id),更容易理解,例外可以避免和 find() 查询使用理解冲突。
    • [ framework ] 修复 redis 连接池连接 PHPRedis 驱动支持重连。
    • [ framework ] 验证器会自动转换验证参数 not_between:1,5 为 int 和 float,以便于框架实现统一强类型的整体方向,例外数据库唯一验证 \Leevel\Validate\UniqueRule 自动识别 int 和 float,避免数据库查询出现转换类型而不再走索引影响性能。
    • [ framework ] 改进实体 \Leevel\Database\Ddd\Entity 查询设计,去掉查询魔术方法,__call 和___callStatic 被屏蔽,所有查询均需要通过静态入口 select(别名 find,保留致敬 QeePHP 习惯),meta(保留致敬 QeePHP 习惯) 发起,再加上 ide helper 支持,完美支持 IDE。
    • [ framework ] 改进实体连接 \Leevel\Database\Ddd\Entity 切库设计,由每个实体自己实现 withConnect 和 connect,更加更新可控,提供切库安全沙盒 connectSandbox。
    • [ framework ] 采用 PDOStatement->debugDumpParams() 来获取最后的 SQL,同时在 debug 组件将 SQL 写入日志方便开发调试。
    • [ framework ] 事务工作单元 \Leevel\Database\Ddd\UnitOfWork 增加对软删除」强删除的支持,也包含仓储对此的调整 \Leevel\Database\Ddd\Repository。
    • [ framework ] 修复并删除实体和仓储中的 flushed 已经刷新过数据的特性,无必要。
    • [ tests ] 新增 10 多例 swoole 相关的测试用例和其它,单元测试 3080 多例,断言 10000+。
    • [ application ] QueryPHP 自身是一个基于 IViewUI 的标准后台,自带基于资源的权限系统,由于框架大量调整后台做了相应的调整以便于运行。
    • [ application ] QueryPHP 自身是主要引入 Workflow 来改善 curd 操作,将查询并入到服务中来。

    RoadMap

    • [ framework ] Beta 4-6 主要是对 Swoole 4 最新版的协程完善支持。
    • [ framework ] RC 版本会冻结计划功能,只修复 BUG、单元测试 和文档完善。
    • [ framework ] v1.0.0 正式版本将随 PHP 7.4 版本后发布https://wiki.php.net/todo/php74,计划是在 2019.12 发布。

    联系方式

    https://www.queryphp.com

    QQ 群 288751294

    Email: [email protected]

    帮助我们

    QueryPHP 是在 2016 年 10 月开始基于一个我早年的 PHP 框架 DoYouHaoBaby 框架开发的,这个早年的框架是我在 2010 年 7.8 月开始的。

    如果你觉得可以,可以推荐朋友来试用一下,关注一哈,希望吸引到有兴趣的一起开发,文档基于单元测试加注释来自动化的比较简单。

    2010-present by Xiangmin Liu

    11 条回复    2019-09-20 10:50:52 +08:00
    buffgek
        1
    buffgek  
       2019-09-10 15:18:53 +08:00   1
    代码质量优秀,但是太庞大太复杂了.还用到了那个 Zephir 语言.一般没人会看得下去,看得下去并能看懂的肯定就是去参考你框架的. 可否考虑切分为组件或使用业内通用组件如 symfony 组件库. 比如容器组件,orm 组件.核心框架. symfony 写了很多通用组件和接口,建议使用一下,或者遵守一下 psr 规范
    doyouhaobaby
        2
    doyouhaobaby  
    OP
       2019-09-10 16:07:30 +08:00
    @buffgek 全部组件化了的 https://github.com/leevels https://packagist.org/packages/leevel/, zephir 可选有考虑废掉,用了不是 Symfony 的组件。
    xkeyideal
        3
    xkeyideal  
       2019-09-10 16:21:45 +08:00
    @doyouhaobaby 书读的少,LEEEL 是什么意思
    doyouhaobaby
        4
    doyouhaobaby  
    OP
       2019-09-10 16:32:11 +08:00
    @xkeyideal Leevel 是单词 level 加入一个 e 新造的词,就如 Swoole ,google 这些本来本不存在的单词。
    代表着 QueryPHP 的愿景是写出有层次感的代码和理想追求,具体表现就是不计成本的编写 3000 多测试用例,快 3 年还有几个月才发布第一个版本 V1.0.0 正式版,也是我们包管理的顶层命名空间,同时 Leevel 也是一个可选 PHP 扩展开发框架,将 QueryPHP 的核心用 zephir 语言编译成 C 实现的扩展。

    Use Leevel\Database\Ddd\Entity;
    xkeyideal
        5
    xkeyideal  
       2019-09-10 16:38:59 +08:00
    @doyouhaobaby 了解了解,楼主加油
    xiaogouxo
        6
    xiaogouxo  
       2019-09-10 20:21:40 +08:00   1
    DoYouHaoBaby 依稀记得 下载过这个框架,第一感觉名字好奇怪
    doyouhaobaby
        7
    doyouhaobaby  
    OP
       2019-09-10 22:33:07 +08:00
    @xiaogouxo 可能 9 年前下载过,哈哈
    hiboshi
        8
    hiboshi  
       2019-09-11 08:06:42 +08:00   1
    支持
    buffgek
        9
    buffgek  
       2019-09-11 15:57:56 +08:00
    @doyouhaobaby 我的意思是不要所有组件放在一个库里.比如 orm 分割为 composer 库,容器分割为 composer 库... 核心框架依赖这几个库.不然你那里面那么多东西,第一眼看上去很吓人.
    还有我说的 psr 规范是指 容器接口规范,缓存接口规范这些 自己写的组件应该实现以下业界通用 interface
    doyouhaobaby
        10
    doyouhaobaby  
    OP
       2019-09-12 09:37:40 +08:00
    @buffgek 除了维成本考虑用 sh 脚本按照目录分隔为包,有一个大的 framework 包,参考 laravel 的维护模式。
    https://github.com/hunzhiwange/framework/blob/master/split.sh 。确实可以弄一个精简版本的依赖主要核心包的,Psr 遵循了日志,缓存未改进,psr2 代码规范。
    wo642436249
        11
    wo642436249  
       2019-09-20 10:50:52 +08:00
    支持 Mongodb 嘛?
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3247 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 11:30 PVG 19:30 LAX 04:30 JFK 07:30
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86