Skeleton4j 白皮书

背景

通常情况下我们在开发J2EE应用过程中都会使用到Struts或者Spring MVC之类的MVC框架,用于进行管理台页面的开发,虽然MVC模式在一定程度上提高了可维护性,但是却给我们开发人员带来了更多工作量。本文以在寻找一种能够用将前端的交互逻辑、界面等通过契约规范进行限定,从而实现去前端化?

我将该项目命名为Skeleton4j(Skeleton for java),skeleton [ˈskɛlɪtn] 单词原意为人体骨骼或者建筑物中的骨架。Skeleton4j带给我们的是开创性的高效和快捷,在一定程度上实现去前端化。快捷基于规范构建的元信息在最简程度上进行定义,实现更快的开发,高效基于SDK思想,基于元信息的自动化生成,可确保前后端的可靠运行,省去前后端调试成本。

规范

元信息族

注解名 基本属性 简介
@ApidocService value 用于定义服务,标注在Java接口类上
@ApidocInterface value 用于定义接口(非Java接口,接口是业务领域的说法),标注在Java接口类方法上
@ApidocElement value 用于定义接口中的要素信息,标注在Java接口方法的形参类上和返回类上

用户开发族

注解名 基本属性 简介
@WebPage 用于定义一个页面
@WebNamespace 用于在页面中声明一个命名空间
@WebImport 用于在命名空间中导入一个接口,根据gui类型可实现有界面或者无界面的生成
@WebCascadeInterface 用于在要素信息上定义级联的接口,可以定义级联事件
@WebResultDisplay 用于定义级联接口执行后结果如何展示
@WebResource 导入静态资源或者模板文件
@WebRender 定义渲染方法
枚举 简介
ElementType 定义元素类型,值类型、Bean类型和列表类型
PatternType 表达式类型,可以为正则表达式、ONGL表达式和格式三种
RspCode 定义了规范内置的业务返回码,成功(0000)和失败(0001)
ValueDisplayType 定义元素在生成GUI时展示的GUI组件类型,默认为字符串
WebDisplayType 定义在级联接口时,接口返回的结果使用何种GUI组件展示或者实现的行为
WebLayout 定义元素对应生成的GUI组件的布局模式
WebTriggerEvent 定义触发的事件类型,与JQuery事件一一对应
InterfaceCall Ajax接口调用类型,用于定义Ajax对应的语言接口调用方式
ResourceType 定义在@WebResource中导入的静态资源是何种类型的资源
WebCallType 定义级联接口对应的是URL调用还是Ajax调用
WebGui 定义导入接口时,基于当前导入的接口生成何种GUI界面
WebMode 定义页面类所在包的模块信息描述,主要用于生成顶层菜单和定义模块中是否使用权限

系统开发族

注解名 基本属性 简介
@WebTheme 用于标注在主题文件类上,结合@WebRegisterComponent,@WebRegisterScript,@WebRegisterStyle使用
@WebContainer 用于标注在实现WebContainer接口的类上,定义能够容纳组件的对象,本身可以进行渲染
@WebComponent 用于标注在实现WebComponent接口的类上,定义具体组件,可以进行渲染
@WebInit 用于标注在页面类上或者主题类上,用于导入全局脚本样式或者局部脚本样式
@WebRegisterScript 用于在主题类或者页面类上定义脚本
@WebRegisterStyle 用于在主题类或者页面类上定义样式
@WebEnqueueScript 用于在组件、容器或者页面类上引用全局或者局部脚本
@WebEnqueueStyle 用于在组件、容器或者页面类上引用全局或者局部样式
@WebDependency 用于定义脚本或者样式的依赖脚本或者样式

原理

通过对接口的定义,我们可以以接口为中心定义需要的展示界面。

1.通过系统开发族的注解和枚举定义了一系列的组件;

2.通过用户开发族的注解和枚举定义需要的接口和页面类;

3.基于1.中定义的组件对2.中的接口和页面类进行解析,生成组件信息,通过对组件的渲染生成需要的HTML代码、JavaScript和样式表的代码结果。

4.级联的接口通过在页面代码中的注册事件进行调用服务器中的接口定义,通过委托调用到真实的业务接口。