V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
doyouhaobaby
V2EX  ›  PHP

QueryPHP V1-beta.1 部分文档代码解耦,版本 PHP 7.3.2

  •  
  •   doyouhaobaby · 2019-04-15 11:35:42 +08:00 · 2946 次点击
    这是一个创建于 2052 天前的主题,其中的信息可能已经有所发展或是发生改变。

    经过 1 个月的开发,QueryPHP v1.0.0-beta.1 版本可以发布了,这也是 beta 3 个版本的开始部分。这个版本的主要是代码解耦和性能提升,文档开发。

    关于 QueryPHP

    QueryPHP 是一款现代化的高性能 PHP 7 常驻框架,以工程师用户体验为历史使命,让每一个 PHP 应用都有一个好框架。

    百分之百单元测试覆盖直面 Bug 一剑封喉,基于 Zephir 实现框架常驻,依托 Swoole 生态实现业务常驻,此刻未来逐步渐进。 我们的愿景是 USE LEEVEL WITH SWOOLE DO BETTER, 让您的业务撑起更多的用户服务。

    更新日志

    • Facade 优化,不再继承一个基础的 Facade,不影响单元测试,并且减少了复杂度和调用链
    • 函数惰性加载方案支持,将静态类解耦为真正的函数,框架底层组件直接调用函数本身
    • 文档更新,这次更新了 20 多篇文档
    • 新增几十例测试用例,框架测试用例终于突破 3000 大关,框架部分 3008 测试用例, 9835 断言
    • PHP 最低依赖版本从 PHP 7.1.3 修改 PHP 7.3.2,框架正在迭代距离用户使用还有段时间,我们可以使用最新的特性
    • 框架自带的 composer 载入优化器支持辅助函数白名单
    • QueryPHP 自身是一个包含基础权限的后台系统,代码优化更符合领域驱动设计分层架构,引入工作流简化流水账代码
    • 锁定 doctrine/annotations ~1.6.0 和 zendframework/zend-diactoros ^2.1.1 减少兼容性问题和修复用户安装报错的问题
    • 去掉视图中 v8js 的支持,删除基类 Facade, 删除宏扩展,简化设计减少复杂度。
    • 技术债务,框架底层大量的代码优化进行解耦,减少复杂减少技术债务

    函数惰性加载

    PHP 的函数式特性已经逐步被纯对象所取代,函数库很多时候被包装为静态类,很多时候其实不需要一个类,为此 QueryPHP 底层框架提供了全局函数 fn 来实现了惰性加载。

    <?php
    
    declare(strict_types=1);
    
    fn('Leevel\\Support\\Str\\rand_num', 5);
    

    精简框架自身助手函数库

    仅仅提供 4 个助手函数就完全满足了系统的库函数的加载使用。

    https://github.com/hunzhiwange/framework/blob/master/src/Leevel/Leevel/functions.php

    fn('Leevel\\Support\\Str\\rand_num', 5); 
    hl('dump', 1, 2);
    app('request');
    __('国际化');
    

    例子函数

    <?php
    
    declare(strict_types=1);
    
    namespace Leevel\Support\Str;
    
    /**
     * 随机数字.
     *
     * @param int    $length
     * @param string $charBox
     *
     * @return string
     */
    function rand_num(int $length, ?string $charBox = null): string
    {
        if (!$length) {
            return '';
        }
        if (null === $charBox) {
            $charBox = '0123456789';
        }
        return rand_str($length, $charBox);
    }
    
    // @codeCoverageIgnoreStart
    if (!function_exists('Leevel\\Support\\Str\\rand_str')) {
        include __DIR__.'/rand_str.php';
    }
    // @codeCoverageIgnoreEnd
    

    Facade 优化

    最开始采用的 Laravel 的继承一个基础的 Facade,方便单元测试,有一定性能损失。后来觉得在做单元测试只需要清空容器注册的服务就可以所以优化了一版本。

    <?php
    
    declare(strict_types=1);
    
    namespace Leevel\Encryption\Facade;
    
    use Leevel\Leevel\App;
    
    /**
     * 门面 encryption.
     *
     * @author Xiangmin Liu <[email protected]>
     *
     * @since 2017.06.10
     *
     * @version 1.0
     */
    class Encryption
    {
        /**
         * call.
         *
         * @param string $method
         * @param array  $args
         *
         * @return mixed
         */
        public static function __callStatic(string $method, array $args)
        {
            return App::singletons()
                ->make('encryption')
                ->{$method}(...$args);
        }
    }
    

    文档更新

    系统新增了 20 个新的文档,后续会逐渐丰富起来。

    https://www.queryphp.com/docs/

    自动载入优化器

    QueryPHP 实现了一套基于并且优化了 composer 的自动加载,并且屏蔽了助手函数的载入。

    这次提供了白名单来让你选择部分函数的载入。

    /**
     * ---------------------------------------------------------------
     * Composer
     * ---------------------------------------------------------------.
     *
     * 用于管理 PHP 依赖包
     * 优化 composer 性能,提炼 composer 中的 autoload_static 中的我们关注的 psr4 命名空间映射
     * 我们 classmap 需要通过 `php leevel autoload` 生成,包含命令 `composer dump-autoload -o`
     * 对于助手函数需要自己引入
     */
    $autoloadLeevel = __DIR__.'/../vendor/autoloadLeevel.php';
    
    if (is_file($autoloadLeevel)) {
        $composer = require $autoloadLeevel;
    } else {
        $composer = require __DIR__.'/../vendor/autoload.php';
    }
    

    composer.json 部分代码

    {
        "name": "hunzhiwange/queryphp",
        "description": "The QueryPHP Application.",
        "require": {
            "php": "^7.3.2",
            "hunzhiwange/framework": "dev-master"
        },
        "extra": {
            "leevel-console" : {
                "autoload": {
                    "@namespaces": "The white of Psr4",
                    "namespaces": [
                        "Leevel",
                        "Dotenv",
                        "Carbon",
                        "Monolog",
                        "Whoops",
                        "Swagger"
                    ],
                    "@files": "The white of autoload files",
                    "files": [
                        "common/Infra/functions.php",
                        "hunzhiwange/framework/src/Leevel/Leevel/functions.php"
                    ]
                }
            }
        }
    }
    

    更好地领域驱动分层实现,工作流支持

    正在尝试更好地代码实现领域驱动设计分层架构。

    https://github.com/hunzhiwange/queryphp/blob/master/common/Domain/Service/User/Role/Update.php

    锁定部分组件版本

    锁定 doctrine/annotations ~1.6.0 和 zendframework/zend-diactoros ^2.1.1 减少兼容性问题和修复用户安装报错的问题,持续集成系统在 composer 最低依赖状况下不会出错。

    https://github.com/hunzhiwange/queryphp/issues/1

    帮助我们

    QueryPHP 是在 2016 年 10 月开始基于一个我早年的 PHP 框架 DoYouHaoBaby 框架开发的。这个早年的框架是我在 2010 年 7.8 月开始的,那个时候在大二,开始的框架也主要用于自用。早年基于这个框架的一些应用作品如下:

    DYHB.BLOG_X

    DYHB.BLOG_X-2.0 详细安装图文教程 http://www.knowsky.com/804758.html

    http://www.downcode.com/downcode/j_18106.shtml

    https://github.com/hunzhiwange/dyhb.blog-x

    WindsForce 社区

    http://www.mycodes.net/code_previewmap.php?id=6185

    https://github.com/hunzhiwange/windsforce

    https://www.oschina.net/p/windsforce

    目前 QueryPHP 由本人一人负责开发,文档,logo 设计,视频,官网和宣传需要大量精力。

    如果你觉得可以,可以推荐朋友来试用一下,关注一哈,希望吸引到有兴趣的一起开发,文档,。

    用 10 年打造一个完美的作品,2010-present Xiangmin Liu。

    3 条回复    2019-04-15 16:57:40 +08:00
    vst93
        1
    vst93  
       2019-04-15 12:13:35 +08:00   ❤️ 1
    一个人专注于一个产品值得敬佩,加油
    rookies
        2
    rookies  
       2019-04-15 14:10:12 +08:00   ❤️ 1
    敬佩
    NjcyNzMzNDQ3
        3
    NjcyNzMzNDQ3  
       2019-04-15 16:57:40 +08:00   ❤️ 1
    支持,已 start
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4592 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 01:05 · PVG 09:05 · LAX 17:05 · JFK 20:05
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.