信息管理系统框架Freestruts

本方案可搭建各类信息管理系统,快速灵活可定制,稳定可靠
了解咨询

雷达评级

AA

用户规模

-

产品上线

-

1.1 什么是Freestruts

Freestruts是一个基于J2EE的web框架,主要应用于各种web系统开发,专于信息系统、办公系统等非网站类项目和产品。


1.2 Freestruts的结构

Freestruts的结构简单,核心围绕着页面视图展开,采用页面控制器模式,由界面主导程序的调用和运行,保证了用户所见和程序执行的一致性!

 

1.2.1 基于SSHF的底层支持

SSHF,即Spring、Struts2、Hibernate、Freemarker,当前主流的web开发开源框架。对于SSHF不熟悉的读者,可先到相关网站阅读有关文档。

(下一个版本将修改为Spring+Springboot+Mysql4J+Layui+Freemarker)

Freestruts在SSHF的基础上,进行了再次封装,提供了便捷的方法和功能,统一了程序结构和运行方式,避免了由于SSHF过于灵活造成的开发随意性。 对于SSHF,框架本身只应用了其最基本的功能,对那些复杂和高级应用,可由程序员在项目过程中酌情处理,Freestruts不阻止软件编写人员对SSHF的探索,Freestruts对程序结构的约束是规范性的,是弱的。


1.2.2 页面视图结构



页面视图View,是Freestruts框架定义的基本程序单元。一个视图,是指在web页面中的一个区域,该区域由Freemarker macro的view标签定义,通过Ajax方式同服务器端的struts action进行交互,代替以往的iframe功能。 一个页面可包含多个视图,每个视图相对独立,视图中js变量的作用域属于整个页面,只要视图被加载完毕,视图之间的js变量,可以直接相互访问。 这一点和iframe不同,iframe的URL指向的是独立的页面,其中的变量互相隔离,程序间的交互非常困难。


页面视图定义出页面中一块相对独立的区域,可独立加载、刷新、执行功能、上传、下载等,不影响其它视图,同时提供了多视图之间联动的交互方式,使页面的构建更加简单方便,避免了因加载不同数据造成干扰而导致的不必要的程序复杂性。


在Ajax出现以前,页面都采用整体刷新模式,为了局部更新数据,只能嵌入iframe。Ajax出现以后,实现了同服务器的异步交互,人们又走向了另一个极端,用Ajax直接提取数据,裸数据,这些零散的数据怎样嵌入到页面的恰当位置,又造成了不小的问题。


Freestruts的页面视图,避免了上述情况,视图内嵌Ajax,同服务器交互,返回的不是零散的原始数据,而是视图代码片段——既避免了页面整体刷新,又不用一个一个关注零碎的数据。 这种方式带来的一个直接效果就是,用户在页面上看到的逻辑,同服务器端的逻辑基本一致,从而提高了软件整体的可读性,降低了开发维护人员的工作量。逻辑通顺,条理清晰,极大的降低了业务逻辑的复杂性。


1.2.3 Macro封装

Freestruts框架页面采用组件方式封装。页面中的视图、表单控件、数据表格、面板等,均封装成freemarker的macro,调用语法类似html,控件初始化后,在客户端可以继续通过js对其进行操作,整个页面看起来就是“可操作的标签”。 每个标签,均有一个属性“var”,该属性的值,可以作为js对象直接使用,用以控制组件的各种状态或者行为。


这种封装方式,使页面编码保持了原有的html风格,同时避免了纯html带来的凌乱。组件的js对象,提供了操作组件的足够的灵活性,避免了直接对dom的繁琐编码。象html一样构建,象java一样使用!


1.2.4 Ajax的应用

Freestruts框架目前使用Ext.Ajax作为Ajax引擎。同时增加了同步功能,使必须顺序执行的情境,也可以方便的嵌入Ajax应用,就像调用一个本地方法。


1.2.5 调用方式

Freestruts的调用如下图:

    

1.3 Freestruts的功能模块

框架目前有权限管理、流程引擎、多维分析、系统日志等几个功能模块,其中权限管理同框架耦合稍显紧密,其它模块则同框架没有耦合关系。


1.3.1 权限管理 - paics

权限管理是历经多个项目最后沉淀下来的系统模块,功能简洁灵活。模块分为群组、用户、角色、许可以及它们的关联五种持久型对象。用户对象包含用户名、密码、用户昵称等用户登录相关信息,除此之外,用户还分为外部引入和内部创建两种类型。 外部引入是指用户信息来自系统的其他业务表,通过数据库视图的方式,自动导入到权限系统中来。内部创建,则是指通过权限系统界面手动创建的用户。 群组和角色,也同用户一样,存在类似的分类。这样极大地增强了权限系统的灵活性,把业务数据无缝引入权限管理中,避免了不必要的代码逻辑。


用户登录后,系统根据用户关联的角色,找到对应的许可,把许可封装到用户信息对象(Userinfo)里,再把用户信息对象绑定到session中,供后续的应用程序使用。 当Freestruts中某个应用被调用时,相关action会首先进行许可匹配,如果存在对应的许可,则取出它的值,作相应的行为调整和限制。


群组是用户的集合,角色是许可的集合,通过这种整合的方式,避免了直接操作用户和许可的繁琐和庞杂。


许可是一个可多选的多值对象,一个许可有一组值,进行权限配置时,对这些值进行选择,选好后,即作为该用户的许可值,该值由特定的解析对象解析,以方便应用程序使用。当不选择任何值时,许可会使用初始值(默认值),作为它的值。


关联列表记录了权限系统中各个对象之间的关联关系,这些关系通过权限配置生成。通过查找这些关联,系统确定用户的最终许可。


1.3.2 流程引擎 - processflow

processflow是一个简洁灵活的流程管理组件,主要包括Flow、Process、Token、Activity四个数据模型和一个流程管理器Processor。


Flow代表整个流程对象,Process为过程对象,相当于流程节点,一个流程包含多个过程,并且支持多过程并行存在。Token为标记对象,它标记出工单在节点中的位置,是流程流转的具体对应物。通过Token,用户系统可以查找到对应的业务数据。 流程的管理集中在Processor中,Processor提供了关于流程的全部操作,包括查找创建流程,流程节点的打开、关闭、状态、注入标记、发送标记、移除标记、执行动作、抛出事件等。Activity则记录了这些动作的具体执行顺序、时间和执行者。


processflow支持节点之间的事件抛出和接收。系统定义了一些和流程操作有关的默认事件,可以让配置监听器的节点监听到其它节点的任何活动,使引擎内部透明化。开发者也可以定义自己的特定事件,并定义自己的监听器,非常灵活。


processflow力求提供一个简洁灵活的api,满足绝大部分流程需求,甚至把在线扑克游戏,当做流程来实现。


本引擎不支持WfMC规范。


1.3.3 多维分析 - freedice

freedice是一个简单的基于视图的数据呈现模块。可以按照指定的维度,把聚合的度量值显示在一个页面表格中。 维度可以指定多个,这些维度被显示在横表头和纵表头上,表格中则显示度量值。点击维度或度量值,可以呈现一个Chart图表,显示具体的展开数据。


freedice部署好后,可由用户自行定义数据立方体、维度、度量值等,不需二次开发。


1.4 Freestruts的特点

1.4.1 数据层:Hibernate 和 spring jdbc(后续版本修改为Mysql4J,基于JdbcTemplate)

Freestruts底层预置了两种数据访问对象,一种是Hibernate,另一种是spring的jdbc。Freestruts对后者进行了再次封装,尽量使用最小的配置,达到最方便的效果。


1.4.2 表现层组件:Freemarker Macro 和 javascript对象的结合

Freestruts的UI,实际上横跨两个层,一个是struts action返回的page页面,这个是用Freemarker编写的,另一个是浏览器中的HTML的dom,这部分主要使用javascript进行操作。


Freemarker的Macro封装UI组件,javascript操作这些组件,象HTML一样编写,象java一样操作,使页面开发简单、易读。