QuarkAdmin對比DcatAdmin,LaravelAdmin

tangtanglove發表於2021-12-09

QuarkAdmin是什麼

QuarkAdmin 是一個可以幫你快速搭建管理後臺的工具;它提供的豐富元件,能幫助您使用很少的程式碼就能搭建出功能完善的管理後臺。

經過這幾個月的磨合QuarkAdmin2.0已經非常成熟了,是時候再次與大家見面了;無論是在靈活度,還是簡潔度上都優於其他的Admin,下面我們進行一下對比。

架構優勢

QuarkAdmin2.0採用的是前後端分離的方案,前端是基於Antd Pro的低程式碼引擎,我給她起的名字叫QuarkUI;是的你沒看錯,她未來的定位就是低程式碼引擎,一個可以通過JSON配置就可以組裝前臺頁面的JS框架。後端是一個相容各個PHP框架(例如Thinkphp)的composer包,我叫他Quark;Quark提供各種原子元件,行為、表單、表格、選單等等等,基於Antd,應用盡有!Quark+QuarkUI=QuarkAdmin。

API簡潔

QuarkAdmin參考了Laravel Nova的解決方案,API非常簡潔優雅,下面我們與DcatAdmin進行對比:
我們先來看一下DcatAdmin,實現一個頁面要做什麼:

    /**
     * Make a grid builder.
     *
     * @return Grid
     */
    protected function grid()
    {
        return Grid::make(new Article(), function (Grid $grid) {
            $grid->id->sortable();
            $grid->title;
            $grid->created_at;
            $grid->updated_at->sortable();

            $grid->filter(function (Grid\Filter $filter) {
                $filter->equal('id');
            });
        });
    }

    /**
     * Make a show builder.
     *
     * @param mixed $id
     *
     * @return Show
     */
    protected function detail($id)
    {
        return Show::make($id, new Article(), function (Show $show) {
            $show->id;
            $show->title;
            $show->created_at;
            $show->updated_at;
        });
    }

    /**
     * Make a form builder.
     *
     * @return Form
     */
    protected function form()
    {
        return Form::make(new Article(), function (Form $form) {
            $form->display('id');
            $form->text('title');
            $form->display('created_at');
            $form->display('updated_at');
        });
    }

我們再來看一下QuarkAdmin:

   /**
     * 頁面標題
     *
     * @var string
     */
    public static $title = '文章';

    /**
     * 模型
     *
     * @var string
     */
    public static $model = 'App\Article';

    /**
     * 欄位
     *
     * @param  Request  $request
     * @return array
     */
    public function fields(Request $request)
    {
        return [
            Field::hidden('id','ID'),
            Field::text('title'),
            Field::datetime('created_at'),
            Field::datetime('updated_at')
        ];
    }

其實QuarkAdmin1.0也是參照LaravelAdmin的方式,但是在實際的應用中,好多問題沒辦法優雅的解決;其中一個最頭疼的問題就是程式碼臃腫,當你在使用LaravelAdmin邏輯複雜時,你會發現好多程式碼都會集中到grid、form方法裡面,例如你的搜尋、行為都很多的時候,grid裡的程式碼會非常多的;筆者在開發QuarkAdmin1.0的時候異常痛苦。所以在2.0的時候,我們把行為、搜尋進行了解耦;把原來集中在grid、form裡面的邏輯抻開,例如:

    /**
     * 搜尋表單
     *
     * @param  Request  $request
     * @return object
     */
    public function searches(Request $request)
    {
        return [
            new \App\Admin\Searches\Input('username', '使用者名稱'),
        ];
    }

    /**
     * 行為
     *
     * @param  Request  $request
     * @return object
     */
    public function actions(Request $request)
    {
        return [
            new \App\Admin\Actions\FormSubmit,
            new \App\Admin\Actions\FormReset,
            new \App\Admin\Actions\FormBack,
            new \App\Admin\Actions\FormExtraBack
        ];
    }

我們再來說說欄位上的優勢,在大多數情況下列表的欄位與表單的欄位是一一對應的,所以QuarkAdmin將grid、form欄位的定義集中到了一起,例如:

    /**
     * 欄位
     *
     * @param  Request  $request
     * @return array
     */
    public function fields(Request $request)
    {
        return [
            Field::hidden('id','ID')->onlyOnForms(),
            Field::text('title','標題'),
            Field::number('sort','排序'),
            Field::text('url','連結'),
            Field::datetime('created_at','新增時間')->onlyOnIndex(),
        ];
    }

未來構想

我現在開源了6個庫,分別是Quark,QuarkUI,QuarkAdmin,QuarkCMS,QuarkAPP,QuarkDoc;
Quark:一個可以相容所有PHP框架的,可以快速構建前臺頁面的Composer擴充套件包(已完成);
QuarkUI:一個可以通過JSON配置構建頁面的低程式碼引擎(已完成);
QuarkAdmin:一個基於Quark、QuarkUI的Laravel後臺擴充套件(已完成);
QuarkCMS:一款基於QuarkAdmin的內容管理系統(已完成);
QuarkAPP:一個可以通過JSON配置構建APP、各種小程式、H5的引擎(正在選型)
QuarkDoc:各個類庫的文件。

寫在最後

這個專案堅持了兩年,如果算上最原始的構思,已經堅持3年多了;中間有過自我懷疑,團隊牴觸,技術難點無法攻克,架構方向錯誤種種困難,著實不易,歡迎大家點贊,最重要的還是希望大家能用起來,給大家帶來價值。
Github:
github CMS 倉儲:quark-cms
github 後端倉儲:quark-admin
github 前端倉儲:quark-ui

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章