ToyBricks
ToyBricks(积木)(以下简称ToyBricks)是基于面向积木方法论构建的、面向Java开发(尤其是RIA应用)的开源开发平台,
旨在提供给开发者一个简单易用、高效率、高产品质量、易扩展的开源平台,“像搭积木一样开发软件”。
ToyBricks解决了很多长期困扰Java开发者的问题,如:
1)开发所应用的“平台”都是拼凑而成而非真正意义上的整合解决方案
。
事实上,很多软件公司的平台都是用开源软件“混搭”而成,典型的,如
SSH(Struts+Spring+Hibernate)、FSH(Flex+Spring+Hibernate)等,这种混搭方案天然的割裂了作为组件
的完整性,因为很多组件是横跨展现、业务逻辑甚至持久层的
;
2)JavaEE中Web开发规范的缺陷。
在当前的JavaEE开发中,作为一个功能,页面与业务逻辑、配置等文件是分散在不同地方的
(页面jsp、
html、js、css、图片等等一般放在工程rootFolder的某个文件夹中;业务逻辑放在classpath下;配置文件有时候要放在WEB-INF
文件夹中),这种分散天然的破坏了作为一个功能的“聚合”要求
(事实上在我们日常的设计工作中,人们追求松耦合更甚于高聚合),我们很多时候是希望作为一个功能的全部文件放在一起的;
这种分散式的结构直接导致了“一个功能或模块打包形成一个jar文件作为产出物”的困难
。
3)多个功能、模块之间的冲突问题
。
jar冲突是最显而易见的了,不同模块要求同一jar的版本可能不同,由于缺乏像OSGI那样的单元(OSGI中为Bundle)
隔离机制,所以只能一方向另一方妥协;
4)编程模型复杂、学习难度高
。
无论Struts的MVC、Flex的组件模型、Spring的IOC/AOP、Hibernate的ORM等等,其学习与应用
都是有一定难度的;
5)缺乏组件模型或组件模型复杂。
可复用的资源积累是一个软件企业知识资产积累的重要组成部分
,以JSP的Tag为例,目前很多企业内部只有少部分高
水平技术人员被授权开发公司应用的标签库,这严重限制了可复用资源的积累;
6)缺乏清晰的功能、模块边界。
功能、模块之间高度耦合,且耦合分散在各个角落,导致模块拆分困难
;
ToyBricks目前提供的功能
1)ToyBricks JavaBean运行容器;
2)Aquarell模板引擎;
3)RIA实现;
4)常规组件库:
1】
UI
类
1.
按钮(支持下拉菜单、状态控制、图标自动匹配)
2.
Text
编辑器(支持自定义扩展、校验器等)
3.
TextArea
编辑器(支持自定义扩展、校验器等)
4.
Combox
编辑器(可组合其他编辑器、支持即时搜索(可配置客户端或服务端数据源)、校验器等等)
5.
日期(时间)选择器(支持可配置的年月、年月日、年月日时间、时间等等选择)
6.
HTML
编辑器(基于
CKEditor
,支持各类常规操作,可通过配置
mode
(模式)为
basic/cms
等来批量选择功能按钮)
7.
选择树编辑器(支持单选、多选、节点锁定等等)
8.
文件上传(基于
Flex
技术、支持单个与多文件上传、限制类型、大小、各类回调函数等等)
9.
代码高亮显示
10.
数据表格(支持列排序、列搜索、单元格编辑、分页、行菜单、表格菜单、预定义模板按钮等等)
11.
自由格式表格
12.
Tree
(支持节点懒加载、工具条按钮扩展、节点菜单等等)
13.
表单(
Form
)(支持编辑器自由布局与格式化布局、支持值自动分发与收集、统一校验等等)
14.
菜单(无限层级支持、状态控制、动态数据源等等)
15.
菜单条
16.
TabBox
(支持
Tab
懒加载、锁定等)
17.
工具条
18.
对话框
19.
CSS
引用(支持全局(页面)唯一引用)
20.
JavaScript
引用(支持全局(页面)唯一引用)
21.
Splitter
22.
图标库(预置了上百种各类图标,提供非常简单的扩展机制)
2】
数据源(基于
Toplink
(
JPA
),支持基于
JPA
规范的
ORM
,支持多数据源,域对象自动发现等等)
3】
Dao
(同时支持基于
JPA
规范与原生
SQL
)
ToyBricks的特性
1)开发者只需要掌握简单的Java、Html(简单的Javascript及CSS)即可
;
2)搭积木的开发体验
,开发者只需要编写必须的代码;
3)ToyBricks提供了丰富的组件库
;
4)桌面级的用户产品体验
;
5)应用即组件、一切皆组件
。事实上,实际开发中有约50%以上都是重复的功能,基于ToyBricks体系,您可以将您想要的一切封装成组件;
6)一个功能(模块、甚至系统)可以打包成一个jar文件,边界清晰
;
7)运行时隔离;
8)比OSGI更简单的扩展机制
(套娃模型);
9)搭配ToyBricks的WebOS平台,您已经拥有了一套完整的系统;
ToyBricks平台结构
【下载ToyBricks平台(V4.0)核心源代码】
见附件
【下载ToyBricks平台源代码许可协议】
见附件
【下载ToyBricks平台开发手册】
见附件
【下载Demo样例】
MyEclipse工程形式的Demo(下载附件后(共三部分),解压缩,import入MyEclipse即可)
Demo工程源码简单分析
1.文件结构
2.源代码片段
project.ria.xml
该文件定义了应用程序
<?xml version="1.0" encoding="UTF-8"?>
<prolet id="helloworld" title="Helloworld" view="helloworld.aq.html"
class="HelloworldBiz">
<!-- 子应用程序 -->
<subpro id="dialog0" title="对话框" view="dialog0.aq.html" />
<subpro id="dialog1" title="helloworld作为组件使用" view="dialog1.aq.html" />
</prolet>
HelloworldBiz
主应用程序的业务逻辑
package helloworld;
import java.util.HashMap;
import java.util.Map;
import org.cloudsinger.components.util.ListDataModel;
import org.cloudsinger.toybricks.api._JunctionTo;
public class HelloworldBiz {
private String name = "Hello ToyBricks.";
public void setName(String _name) {
name = _name;
}
/**
* ajax调用返回结果
*
* @return
*/
public String getName() {
return name;
}
/**
* 挂接到组件(demoGrid)的依赖项(getDataSource),获取数据源
* <p>
* 数据表格获取数据源有多种方法,如直接给出jpaSql、如本例中给出结果集等等
* </p>
*
* @return
*/
@_JunctionTo("this/demoGrid:getDataSource")
public ListDataModel<Map<String, String>> getDemoGridDS() {
ListDataModel<Map<String, String>> rtn = new ListDataModel<Map<String, String>>();
Map<String, String> row = new HashMap<String, String>();
row.put("id", "20110203");
row.put("title", "面向积木编程");
rtn.getDataList().add(row);
rtn.getDataList().add(row);
rtn.getDataList().add(row);
rtn.getDataList().add(row);
rtn.getDataList().add(row);
rtn.getDataList().add(row);
rtn.getDataList().add(row);
rtn.getDataList().add(row);
rtn.getDataList().add(row);
rtn.getDataList().add(row);
rtn.getDataList().add(row);
rtn.getDataList().add(row);
rtn.getDataList().add(row);
rtn.getDataList().add(row);
rtn.getDataList().add(row);
rtn.getDataList().add(row);
rtn.getDataList().add(row);
rtn.getDataList().add(row);
rtn.getDataList().add(row);
rtn.getDataList().add(row);
rtn.getDataList().add(row);
rtn.getDataList().add(row);
rtn.getDataList().add(row);
rtn.getDataList().add(row);
rtn.getDataList().add(row);
rtn.getDataList().add(row);
rtn.getDataList().add(row);
rtn.getDataList().add(row);
return rtn;
}
}
helloworld.aq.html 主应用程序的视图
<!-- 引用ToyBricks的UI组件库 -->
<#taglib use="cloudsinger.components/ui/*" for="cs"/>
<style>
.tt{
background-color:#f1f1f1;
height:50px;font-family:微软雅黑;font-size:16px;font-weight:bold;
line-height:50px;
}
</style>
<script>
function sayHello(){
var msg = ${window}.ajax("getName");
alert("您单击的结果是:"+msg+",右键单击可以显示菜单哦");
}
function showDialog(){
${window}.dialogR("dialog0",500,400);
}
function showOtherHelloworld(){
${window}.dialog("dialog1",700,400);
}
</script>
<#-- 打印变量 --#>
<div class="tt">${name}</div>
<#-- 菜单条组件 --#>
<cs:Menubar>
<cs:Menu title="文件">
<cs:item title="打开对话框" onclick="showDialog" />
<cs:item title="将helloworld作为组件打开" onclick="showOtherHelloworld" />
<cs:item />
<cs:item title="其他">
<cs:item title="子菜单项目" onclick="alert('子菜单项目')" />
<cs:item title="子菜单项目" onclick="alert('子菜单项目')" />
<cs:item title="子菜单项目" onclick="alert('子菜单项目')" />
</cs:item>
</cs:Menu>
<cs:Menu title="帮助">
<cs:item title="关于" onclick="alert('ToyBricks开放平台演示应用程序')"/>
</cs:Menu>
</cs:Menubar>
<#-- 工具条组件 --#>
<cs:Toolbar>
<cs:Button title="新建" onclick="alert('新建')" />
<cs:Button title="打开对话框" onclick="showDialog" />
<cs:Button title="将helloworld作为组件打开" onclick="showOtherHelloworld" />
<cs:Button/>
<cs:Button title="关于">
<cs:menu>
<cs:Menu>
<cs:item title="关于" onclick="alert('ToyBricks开放平台演示应用程序')"/>
</cs:Menu>
</cs:menu>
</cs:Button>
</cs:Toolbar>
<#-- 菜单组件,注册为按钮btn的右键菜单 --#>
<cs:Menu apply="#btn">
<cs:item title="测试菜单项" />
<cs:item title="新建" />
<cs:item />
<cs:item title="其他">
<cs:item title="测试菜单项" />
</cs:item>
</cs:Menu>
<#-- 数据列表组件 --#>
<cs:DataGrid id="demoGrid" style="height:300px;width:100%;">
<cs:columns>
<cs:colum field="id" title="ID" />
<cs:colum field="title" title="标题" />
</cs:columns>
<cs:rows onDblClick="showDialog">
<cs:menu>
<cs:Menu>
<cs:item title="打开对话框" onclick="showDialog" />
<cs:item title="将helloworld作为组件打开" onclick="showOtherHelloworld" />
</cs:Menu>
</cs:menu>
</cs:rows>
</cs:DataGrid>
dialog0.aq.html
第一个对话框的视图
<#taglib use="cloudsinger.components/ui/*" for="cs"/>
<cs:TabBox>
<cs:Tab title="欢迎">
<img id="imm" src="${lafPath}/welcome.gif" />
</cs:Tab>
<cs:Tab title="Tab页面1">
<div>abc</div>
</cs:Tab>
</cs:TabBox>
dialog1.aq.html
第二个对话框的视图
<#taglib use="helloworld" for="hw"/>
<div style="border:1px dashed red;">
<hw:helloworld name="应用程序即组件,我也是一个组件哦"/>
</div>
运行效果如下图:
天云创意.基础平台研发团队
合作者意向联系方式 Mail:cloudsinger@126.com QQ 16384284
美丽人生.精彩创意
天云创
意
- 大小: 23.7 KB
- 大小: 21.3 KB
- 大小: 32.4 KB
- 大小: 4.9 KB
分享到:
相关推荐
基于java的开发源码-md blockchain 开源java区块链平台.zip 基于java的开发源码-md blockchain 开源java区块链平台.zip 基于java的开发源码-md blockchain 开源java区块链平台.zip 基于java的开发源码-md blockchain...
c++设计模式--基于Qt4开源跨平台开发框架(源代码)c++设计模式--基于Qt4开源跨平台开发框架(源代码)c++设计模式--基于Qt4开源跨平台开发框架(源代码)c++设计模式--基于Qt4开源跨平台开发框架(源代码)c++设计模式--...
官方网址:http://www.renren.io/项目演示地址:http://fast.demo.renren.io/#/login 账号密码admin/adminrenren-fast是一个轻量级的 Spring Boot 快速开发平台,能快速开发项目并交付【接私活利器】完善的 XSS 防范...
"让H5制作像搭积木一样简单, 轻松搭建H5页面, H5网站, PC端网站, LowCode平台"这个主题,旨在介绍一种简化H5开发过程的方法,使得非专业开发者也能轻松上手,实现快速搭建H5页面和网站的目标。 H5 Page Maker 和 H5...
1. **模块化设计**:ZKEACMS采用模块化设计,允许开发者根据需求添加或移除功能模块,如文章管理、图片展示、论坛等,就像积木一样灵活组合。 2. **易用性**:ZKEACMS提供直观的后台管理界面,非技术人员也能轻松...
CRAP - 开源API接口管理平台 | 完全开源、免费使用的API接口管理系统,BUG管理系统:API接口管理、文档管理、数据库表管理、接口调试、浏览器调试插件、导出word&pdf接口…..,采用SpringMVC + MyBatis + Lucene + ...
《大恒双相机开发-C#-多线程项目开源解析》 在当今信息化时代,高效、稳定的图像处理系统成为许多领域不可或缺的技术支持。本项目"大恒-双相机开发-C#-多线程"正是这样的一个实例,它利用C#语言进行编程,实现了对...
《C++设计模式--基于Qt4开源跨平台开发框架》涉及到qt的基础知识和容器语法的使用,qt中的设计模式,是很好的资料。现与大家一起分享。免费下载。 由于上传大小有限制,所以分为两部分。 第一部分下载地址: ...
Omni-Notes:开源笔记Android应用程序,有许多功能比如分享,搜索,附加图片,视频,音频,在笔记中涂鸦,添加提醒等。
宋宝华.pdf》、《USB中文协议》、《USB结构体系.pdf》、《嵌入式Linux的USB驱动程序开发.pdf》、《linux设备驱动开发详解-usb篇.pdf》以及《快速USB学习.doc》,这些资源全面覆盖了USB开发的基础知识和高级应用。...
Android-ToyBricks是一个专为Android开发者设计的库,旨在简化模块化开发流程。这个库的核心目标是通过提供一套高效且易于使用的工具,帮助开发者将大型应用分解为多个可独立开发、测试和维护的模块。模块化在大型...
《C++设计模式--基于Qt4开源跨平台开发框架》涉及到qt的基础知识和容器语法的使用,qt中的设计模式,是很好的资料。现与大家一起分享。 2部分
此外,Helion提供的原生云开发平台使得开发者能够专注于应用开发,而服务目录、服务交付自动化和快速服务创建则简化了运维过程。 在战略上,惠普Helion构建了一个企业可信的云平台,具备开放性、灵活性和安全性三大...
FFmpeg是一款开源的音视频处理工具包,广泛应用于多媒体开发领域。它包含了多个库,如libavcodec(编码器库)、libavformat(容器格式库)、libavfilter(过滤器库)和libavutil(通用工具库),为开发者提供了丰富...
PHP实例开发源码—DzzOffoce Beta2 php开源云存储与应用管理系统.zip PHP实例开发源码—DzzOffoce Beta2 php开源云存储与应用管理系统.zip PHP实例开发源码—DzzOffoce Beta2 php开源云存储与应用管理系统.zip
OpenPLC是一款面向开源社区的全功能可编程逻辑控制器(PLC)项目,它提供了丰富的资源,适合学习者和专业人士进行研究与开发。这个项目的独特之处在于它的开放性,不仅软件源代码公开,而且硬件设计也完全透明,使得...
**标题解析:** "fo-dicom开源类库NET4.0版" ...6. .NET Framework 4.0:Microsoft的开发平台,支持多种编程语言,用于构建桌面和Web应用程序。 7. 开源项目结构:源代码、示例、文档、编译库和许可文件等组成部分。
WebBuilder是一款跨平台、数据库和浏览器的可视化Web应用开发平台。WebBuilder使用了多项最新的技术,使Web应用的开发更快捷和简单。 作为一款高效的Web开发工具,WebBuilder的特色是: .基于浏览器的集成开发环境 ...
由于文档强调了内核实现和应用开发,可以推断本书会深入介绍μC/OS-III的操作原理和编程实践。 2. STM32开发板系列:文档中提到了野火STM32开发板的全系列,包括了基于Cortex-M3和Cortex-M4内核的不同型号。这些...