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

PHP 框架 DNMVCS 1.1.2 发布

  •  
  •   dvaknheo · 2019-08-25 16:44:21 +08:00 · 5471 次点击
    这是一个创建于 1915 天前的主题,其中的信息可能已经有所发展或是发生改变。

    DNMVCS 1.1.2 发布。

    这么多个 PHP 框架,为什么要用 DNMVCS ? 因为 DNMVCS 是无框架派者做的 PHP 框架。 包括有:

    1. 框架,只做最小的事情。 不要问 XXX 方案在 XX 框架下如何做。 而是问 XXX 方案应该如何用 PHP 去做。

    2. 最小的耦合代码。

    使用 DNMVCS 框架的系统,只有入口类和 DNMVCS 系统耦合。

    如果你的普通业务代码要用到 DNMVCS 的代码 ,那么肯定是你搞错了什么。

    使用 DNMVCS 的业务系统,是基于组合,而不是继承的。

    1. 是实现了“表面调用形式不变,实际实现形式可变”的框架。

    说得五花八门天花乱坠的 DI ,Facades。

    就是为了一个: 如果发生了意外,比如发生安全漏洞,能否在不更改框架文件下解决。 能。

    1. 0 依赖

    0 依赖也是特点? 至少我们不会因为下游不稳定而出现问题。

    5 swoole

    附带 swoole 支持。

    如何开始

    composer require dnmvcs/framework:1.1.2
    ./vendor/bin/dnmvcs --create
    ./bin/start_server.php --no-swoole
    
    

    示例代码。从教程,你可以完整的了解 DNMVCS 情况

    <?php // view/test/done.php ?>
    <!doctype html><html><body>
    <h1>test</h1>
    <div><?=$var ?></div>
    </body></html>
    
    <?php
    // app/Controller/test.php
    namespace MY\Controller;
    
    // use MY\Base\BaseController;
    use MY\Base\ControllerHelper as C;
    use MY\Service\MiscService;
    
    class test // extends BaseController
    {
        public function done()
        {
            $data=[];
            $data['var']=C::H(MiscService::G()->foo());
            C::Show($data); // C::Show($data,'test/done');
        }
    }
    
    <?php
    // app/Service/MiscService.php
    namespace MY\Service;
    
    use MY\Base\ServiceHelper as S;
    use MY\Base\BaseService;
    use MY\Model\NoDB_MiscModel;
    
    class MiscService extends BaseService
    {
        public function foo()
        {
            $time=NoDB_MiscModel::G()->getTime();
            $ret="<".$time.">";
            return $ret;
        }
    }
    
    <?php
    // app/Model/NoDB_MiscModel.php
    namespace MY\Model;
    
    use MY\Base\BaseModel;
    use MY\Base\ModelHelper as M;
    
    class NoDB_MiscModel extends BaseModel
    {
        public function getTime()
        {
            return DATE(DATE_ATOM);
        }
    }
    
    <?php
    require(__DIR__.'/../headfile/headfile.php');
    
    $options=[];
    $path=realpath(__DIR__.'/..');
    $options['path']=$path;
    $options['namespace']='MY';
    \DNMVCS\DNMVCS::RunQuickly($options, function () {
    });
    
    

    项目地址:

    https://github.com/dvaknheo/DNMVCS

    欢迎大家给个宝贵意见。

    19 条回复    2019-09-01 22:15:49 +08:00
    dvaknheo
        1
    dvaknheo  
    OP
       2019-08-25 16:44:51 +08:00
    自从上次 1.1.0 更新 后,一直没做版本发布。 作为一个目前还没项目在用的库,是否发布也没什么重要吧。发版本,主要还是想听听有人说出什么建议。0 反馈 是始终做不好东西的。
    我没有别的渠道宣发,只有这里,和知乎两个地方。

    DNMVCS 的特点其实很多,受限于我的个人表达,没怎么体现出来。我希望真有人提出,原来这是什么什么特点。
    另一方面,肯定 BUG 也不少, 也有好些我在文档里没提到的,以为大家都懂的,实际上漏掉了。

    这就需要沟通,交流,使用,这样才能进步。

    我希望这一年内,DNMVCS 系统有机会上线 一个项目。这样就能在实践中锻炼出来了。才有更多动力。

    末了,我想给这个框架改个名字,DN - MVCS 这个我觉得可以理解,但是一堆字母毕竟对人不友好。

    (刚才发在问与答区了,重新贴)
    beiyu
        2
    beiyu  
       2019-08-25 16:50:40 +08:00
    无框架派者为什么要用框架 (逃
    AngryPanda
        3
    AngryPanda  
       2019-08-25 17:19:05 +08:00 via Android
    PHP 最不缺的就是框架了
    zjsxwc
        4
    zjsxwc  
       2019-08-25 17:23:08 +08:00 via Android
    php 只用 symfony
    ieliwb
        5
    ieliwb  
       2019-08-25 17:25:43 +08:00
    一直用 F3 的飘过
    ck65
        6
    ck65  
       2019-08-25 17:38:24 +08:00
    能解释一下框架名称吗?
    现在很少再有人会给自己的项目起一个无法以一个单词的方式念出来的名字了。
    dvaknheo
        7
    dvaknheo  
    OP
       2019-08-25 17:50:40 +08:00
    @ck65 Dvak Nheo Model View Controller Service 的的头字母
    mamahaha
        8
    mamahaha  
       2019-08-25 17:52:57 +08:00
    浏览器地址上的 php 后缀名不藏着的才是真正热爱 php 的,其他的都是假粉。
    dvaknheo
        9
    dvaknheo  
    OP
       2019-08-25 18:03:52 +08:00
    @beiyu 如果不是为了美化,我还不需要路由,所以 最开始,只需要个路由
    ```
    <?php
    use DNMVCS\Core\Route;
    require(__DIR__.'/../headfile/headfile.php');

    class Main
    {
    public function index()
    {
    var_dump(DATE(DATE_ATOM));
    }
    public function i()
    {
    phpinfo();
    }
    }
    $options=[
    'namespace_controller'=>'\\',
    ];
    $flag=Route::RunQuickly($options);
    if(!$flag){
    header(404);
    echo "404!";
    }
    ```

    DNMVCS\Core\Route 后面还需要什么?
    DNMVCS\Core\ExceptionManager 异常处理,页面要美化吧。
    DNMVCS\Core\View 视图的处理 页眉页脚, 在视图内嵌 include 不方便。
    DNMVCS\Core\Configer 设置,配置的处理

    这就够称了 DNMVCS\Core 的核心组件。
    DNMVCSC\Core 的其他东西

    DNMVCS\Core\ThrowOn 就是为了 XXException::ThrowOn(true,"发生异常"); 快速处理异常。

    DNMVCS\Core\RuntimeState 这是保持当前 context 的。——算预留到 swoole 用。
    DNMVCS\Core\AutoLoader 不要 composer 的时候自己的 autoloader.

    DNMVCS\Core\HttpServer 自带的 HttpServer

    DNMVCS\Core\SingletonEx 可变单例,核心。 甚至可以作为一个项目出来。


    用 DNMVCS\Core\App 把这些东西就凑成了 DNMVCS/Core 这个 框架,就之于 lumen 对应 laravel.


    为了让 M V C S 层不要调用 DNMVCS\Core\App ,我们有派生出了 DNMVCS\Base\[M,V,C,S] Helper

    这东西就多了。

    这些东西,全部就构成了 DNMVCS/Core
    dvaknheo
        10
    dvaknheo  
    OP
       2019-08-25 18:13:50 +08:00
    @mamahaha 浏览器地址上的 php 后缀名不藏着的才是真正热爱 php 的,其他的都是假粉。
    DNMVCS 也支持这种模式哦。
    选项里配置 RouteHookOneFileMode
    ```
    'key_for_action'=>'a',
    'key_for_module'=>'m',
    ```
    开启单文件模式。
    这样会有
    C::URL('A/B?c=d') => xx.php?m=A&a=B&c=d

    如果不是用这种模式,不配置服务器 path_info 的情况下,会变成。

    C::URL('A/B?c=d') => xx.php/A/B?c=d
    liyaoo
        11
    liyaoo  
       2019-08-25 18:49:01 +08:00 via iPhone
    这名字好长,是什么意思?
    pabupa
        12
    pabupa  
       2019-08-25 19:02:18 +08:00
    @liyaoo WDNMD,XYB。😅
    fuxkcsdn
        13
    fuxkcsdn  
       2019-08-25 21:35:06 +08:00 via iPhone
    1,没有单元测试
    2,没有在实际项目中用过?你的意思是连你们公司都不用?那别人干嘛当你的小白鼠?
    dvaknheo
        14
    dvaknheo  
    OP
       2019-08-25 21:46:01 +08:00
    @fuxkcsdn

    1 因为还在初级阶段啊,如果有足够人对他意思,后面的会继续补上。文档写好,代码写好,后一步才是单元测试

    2 因为我没当过: 诺, 就要这个项目来做 , 你们当小白鼠去吧 这样的 leader 啊。
    hiboshi
        15
    hiboshi  
       2019-08-25 21:53:32 +08:00
    支持你。
    fuxkcsdn
        16
    fuxkcsdn  
       2019-08-25 22:30:42 +08:00 via iPhone
    @dvaknheo 那你就拿你这框架甩你们 leader 脸上

    “呐,这是我写的框架,比公司现有的框架牛逼 X 倍,咱们下一个项目(当前这个项目的重构)就基于我这个框架来写吧”

    如果连你们 leader 都不敢(不想)用你这个框架,别人又怎么敢用?
    dvaknheo
        17
    dvaknheo  
    OP
       2019-08-28 19:12:53 +08:00
    @fuxkcsdn 因为我目前待业,哈哈哈。
    dvaknheo
        18
    dvaknheo  
    OP
       2019-08-30 10:33:45 +08:00
    堆栈比较,DNMVCS 的调用堆栈很是清爽,到 view 层也只是 7 层。

    #0 include() called at [/mnt/d/MyWork/sites/t/vendor/dnmvcs/framework/src/Core/View.php:40]
    #1 DNMVCS\Core\View->_Show() called at [/mnt/d/MyWork/sites/t/vendor/dnmvcs/framework/src/Core/App.php:609]
    #2 DNMVCS\Core\App->_Show() called at [/mnt/d/MyWork/sites/t/vendor/dnmvcs/framework/src/Core/Base/ControllerHelper.php:56]
    #3 DNMVCS\Core\Base\ControllerHelper::Show() called at [/mnt/d/MyWork/sites/t/app/Controller/Main.php:14]
    #4 MY\Controller\Main->index() called at [/mnt/d/MyWork/sites/t/vendor/dnmvcs/framework/src/Core/Route.php:204]
    #5 DNMVCS\Core\Route->run() called at [/mnt/d/MyWork/sites/t/vendor/dnmvcs/framework/src/Core/App.php:249]
    #6 DNMVCS\Core\App->run() called at [/mnt/d/MyWork/sites/t/vendor/dnmvcs/framework/src/Core/App.php:103]
    #7 DNMVCS\Core\App::RunQuickly() called at [/mnt/d/MyWork/sites/t/public/index.php:18]
    jksusu
        19
    jksusu  
       2019-09-01 22:15:49 +08:00   ❤️ 1
    楼主,我在几个月前看到你这个框架,给你留言了 "加油"。继续加油吧!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3409 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 04:44 · PVG 12:44 · LAX 20:44 · JFK 23:44
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.