Skip to content

lusess123/akvue

Repository files navigation

akvue

Table of Contents

Introduction

  • 一个 构建时集成 的前端微服务框架
  • 一个插件式,模块化应用的一站式的平台
  • 可用于快速开发 大型2b后台管理系统
  • 基于vue+typescript,同时支持 react

Status:beta

Most of the planned features are in place but there may still be bugs. API may still change until we reach RC phase. Do not use in production yet unless you are adventurous.

feature

平台内核与插件

“封装”的进化史 :

1.function

2.class/file/目录

3.library/package(比如:Prototype.js,jquery)

4.framework(比如,react < vue < angular,三大框架一个比一个重量级)

5.platform , 比如(vscode,Android , OpenERP,各种Paas平台)

akvue是一个简单的platform,提供SDK和可扩展的内核接口,可用来快速开发大型2b后台管理系统,每个项目是平台的一个插件,运行在这个平台之上。

应用插件化 是前端微服务化 的概念,平台现阶段只支持 构建时集成

img

platform 优点:

1.多个团队在不同的代码库里开发

2.高度封装,多个技术栈高度一站式集成,复用程度高,对于开发人员来说,对于80%的场景,提高开发效率

3.由于统一的基础设施,可以�更好的做监控和测试,文档和脚手架生成

4.统一的架构提高了产品质量的下限,

任何技术方案最终不过是一种权衡, platform 的缺点:

1.紧耦合,解耦的代价就是细粒度化模块,写更多的代码,一站化的平台一定程度抑制住这样的行为

2.黑盒化,平台总有主次之分,某些特殊场景扩展能力不足或者模型过于复杂,开发效率反而更低

typescript开发

提高工程稳定性,静态类型系统对IDE友好,能提供更好的类型推导和注释,rename,代码分析

typescript另外一个好处是 真正做到 声明与实现分离,可以把 .d.ts 类型文件放到另外单独的@type 包中

一般来说,“实现”的代码变更会比“声明”代码变更频繁,越底层的模块越是如此

使用继承BaseClass/interface来作为插件定义方式

相对于FP 和 FRP ,OOP虽然笨重,但是门槛低,符合大多数人的理解和思维方式,并且可以复用几十年积累的各种设计模式和经验。对于界面交互大多数场景,OOP是比较好的方式。

那为什么不使用官方的vue-class-component的呢?

1.由于是模拟的class特性,有些功能不支持,比如super

2.比起extends 非class 的 mixin 方式很灵活,可以在核心库里面使用

以UI框架无关的状态OOP对象(类似angular的service)为中心来构建组件

解藕

  1. 以UI框架无关的状态管理更接近实际业务场景,适合 交互逻辑 有一定复杂度和 数据模型 足够厚的场景

  2. 更容易可在vue/react/anguar三大框架之间复用数据和逻辑

控件定义

@ioc.PlugIn({RegName:"DateTimeCol",BaseType:"BaseCol",Author:"zhengyukun",CreateDate:"2018-01-26",Doc:"时间控件插件"})
@vue.com('<DatePicker type="datetime" placeholder="Select date" ></DatePicker>')
export   class DateTimeCol extends BaseCol {

     constructor (config?: IDateTimeColConfig){
         super(config);
     }


}

控件接口声明

import { BaseCom, IBaseComConfig } from "ak-lib-sys/com/BaseCom";
export interface IBaseColConfig extends IBaseComConfig {
   DataValue: any;
   RegName?: string;
   DataSet?: any;
}
export declare class BaseCol extends BaseCom {
   private fDataValue;
   private RegName;
   private DataSet;
   constructor(config?: IBaseColConfig);
   DataValue: any;
   readonly DataText: string;
   protected pGetDataValue(): any;
   protected pGetDataText(): any;
}

集成react

对于2B后台管理系统,“尽量缩小需要下载的js包大小” 和 “兼并react的生态” 的权衡,选择了后者

封装支持:

vue组件中集成react组件
react组件集成vue组件

页面插件可自动注册路由

组件即页面的思想

统一集成IOC,EventBus等常用基础设施

统一基础设施,可以更好的做 监控 和 测试

ES6模块化方案

tree shaking

自动加载项目模块插件

可插拔模块�

使用@vue/cli-service构建站点

黑盒化webpack

lerna管理多模块

对于大型�框架和平台型的方案 来说,适合使用 monorepo 来管理代码

提供针对业务对象高可配置化的CURD组件

对业务对象(可以简单理解为数据库的一张表)CURD是后台管理系统大部分的业务场景,如果能结合后端进行丰富的元数据配置和强大扩展,能解决很大部分的需求

Quickstart

learn bootstrap

npm run serve-host

包依赖图

核心 基础库 - - 项目应用
ak-lib-sys - - - ak-host
核心库 - - - 宿主和公共框架
- ak-dev-node - - ak-app-dwh
- 用于构建的node库 - - 事例项目
- ak-lib-web - - ak-app-sdk
- 页面基础库 - - SDK项目
- ak-lib-comp ak-lib-col ak-lib-biz -
- 常用组件库 控件库 业务对象库 -
- ak-lib-react ak-lib-react-web - -
- react集成库 react页面库 - -

screenshot

项目列表

img

项目详细信息

img

集成antdesigner

img

项目插件信息注册

import { BaseApp } from "ak-lib-web/app/BaseApp";
import { IMenu } from "ak-lib-web/app/IMenu";

import { ioc } from "ak-lib-sys"

@ioc.PlugIn({ RegName: "sdkApp", BaseType: "IApp", Doc: "开发者平台的应用" })
export class dwhApp extends BaseApp {
    protected MenuList = _menus;
    public Name: string = "sdk";
    //<Icon type="social-github"></Icon>
    public Title: string = "开发者中心";
    public Doc: string = "开发者中心";
    public Icon: string = "social-github";

}

const _menus: IMenu[] =

    [
        {
            icon: "chrome", name: "aa1", text: "开发工具", children: [
                { icon: "", name: "/web/codepage", text: "代码生成" }
            ]
        },
        {
            icon: "firefox", name: "aa2", text: "demo案例", children: [
                //eventbuspage
                { icon: "chrome", name: "/web/eventbuspage", text: "全局消息总线" },
                { icon: "chrome", name: "/web/testvmpage", text: "com与vm交互" },
                { icon: "plug", name: "/web/testrxPage", text: "测试绑定数据" },
                { icon: "bicycle", name: "/web/formPage", text: "动态表单" },
                { icon: "", name: "/web/vueclasspage", text: "vue Class" },
                { icon: "", name: "/web/dipage", text: "依赖注入" },
                { icon: "", name: "/web/vue/VuePage", text: "vue组件" },
                { icon: "", name: "/web/DymicPage", text: "动态模版页面" }
            ]
        },
        {
            icon: "fa-plug", name: "aa3", text: "监控工具", children: [
                { icon: "", name: "/web", text: "应用和插件列表" }
            ]
        },



    ]

Foo Foo Foo Foo
Foo Foo Foo Foo
Foo Foo Foo Foo

About

一个 “构建时集成” 的“前端微服务”框架

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published