阅读更多

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样例 part1 part2 part3 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>
  

 

运行效果如下图:

 

 

 

 

 

20
3
评论 共 43 条 请登录后发表评论
43 楼 y234239150 2012-06-18 13:27
关键是你想一个公司10个技术人员中 初、中、高级的比例,初级太多,要考虑学习成本和平台容错性,中级太多,可以更灵活的搭建,不用全部包装,但一定要层次分明结构简单,高级太多,那只能说公司太有钱了,那怎么弄都没关系。。
一个平台一定是性能、扩展性、安全性、易用性、通用性等都要考虑到的,而java轮子方面已经有蛮多了,甚至很多都成为无冕的规范。个人觉得,一个开发平台不是纯粹的写个架子或N多组件去堆,而是将那些大家都知道的,差不多成为规范的东东整一起去,形成一种面向约定的开发方式,无论公司的新员工技术水平如何,只要知道几条约定就能很快上手,不用考虑其代码的性能问题,最大限度的使得开发业务时直观、简单。
可惜了 SSH虽然大家都在用,但还是做不到所有人写的代码性能都差不多,而且对于新人来说,还是太复杂了。。。
42 楼 y234239150 2012-06-18 12:59
.net式开发?
java就不用搞那一套了,因为没有一个能成为标准。。。
jquery+velocity+职责链+mybatis+spring+maven蛮好。。
41 楼 cloudsinger 2012-02-02 11:45
changqingteng 写道
楼主的方案是值得肯定的,可称的上是较好的中小型企业解决方案。所有事务发展必有其过程和机理,先说商业模式,楼主的商业模式好像是增值功能的服务。那么可以猜测,ToyBricks的发展路径有二:其一向开发者授权;其二直接承接客户项目,自己开发。我想楼主知道,后者承接项目走的是一条老路,在此社会背景下,需要一些人事关系。然而前者呢,我想比后者更为艰难,TB的方案貌似全包了整个开发过程,笔者认为这成为了走这条路的最大障碍,且看目前流行的一些解决方案(或框架)spring、strus、hibernate、ibitas等,他们都有所专长且完全开放,他们是可以驾驭的,而TB囊括了太多方面,要通吃全部,可见开发者对于风险的预见性变的极低。且看TB,在某些开发者眼里,及时你的是最好的,未必选择的是最好的。UI方面,EXt和jquery如何如此广泛,原理也是一样的,他们专注于所长,且完全开放,且可被替代。对于一些流行框架,他们并没有定义很高级别的标准,这些高级别的标准是java级别的公司制定的,他们只是定义自己所擅长的并且绝不是整体的标准。再看TB,不仅有着整体的方案,还有着全新的标准(或者说成思路)。
说了这些只是个人随即的观点,请作者不必作为参考。
且说自己的一点观点,TB作者主张组件及积木话,试问作者,您的整体解决方案,能否积木化,不是目前层次的积木化,而是将UI、DAO甚至控制层及其他各个层次积木化,也就是向hibernate只提供数据层方案,或者像ext只提供Ui方案,这样开发者可以选择其中一个几个方案使用,开发者也可以在不进行变动目前架构情况下引入TB积木。此乃共赢。正所谓各个击破。先称霸一方才能一统天下。


感谢changqingteng精彩的论述,对于您的观点,我深表赞同,对于一个想通吃一切的解决方案,其最终的下场必然是:事必躬亲而死而后已。所以,ToyBricks一开始所走的就不是这种方案,其实如果仔细了解ToyBricks的架构,您会发现,ToyBricks的各方面都是可拆分的,从实现了DI/AOP(基础组件模型)的ToyBricks Base到RIA/模板引擎等等,每一块都是专注某一个点,这点其实和Spring到SpringMVC有点像。呵呵,后继我会将最新版本的ToyBricks及详细的思想方法在博客中公布出来。

最后,再次感谢changqingteng的精彩点评。
40 楼 changqingteng 2012-01-18 11:14
楼主的方案是值得肯定的,可称的上是较好的中小型企业解决方案。所有事务发展必有其过程和机理,先说商业模式,楼主的商业模式好像是增值功能的服务。那么可以猜测,ToyBricks的发展路径有二:其一向开发者授权;其二直接承接客户项目,自己开发。我想楼主知道,后者承接项目走的是一条老路,在此社会背景下,需要一些人事关系。然而前者呢,我想比后者更为艰难,TB的方案貌似全包了整个开发过程,笔者认为这成为了走这条路的最大障碍,且看目前流行的一些解决方案(或框架)spring、strus、hibernate、ibitas等,他们都有所专长且完全开放,他们是可以驾驭的,而TB囊括了太多方面,要通吃全部,可见开发者对于风险的预见性变的极低。且看TB,在某些开发者眼里,及时你的是最好的,未必选择的是最好的。UI方面,EXt和jquery如何如此广泛,原理也是一样的,他们专注于所长,且完全开放,且可被替代。对于一些流行框架,他们并没有定义很高级别的标准,这些高级别的标准是java级别的公司制定的,他们只是定义自己所擅长的并且绝不是整体的标准。再看TB,不仅有着整体的方案,还有着全新的标准(或者说成思路)。
说了这些只是个人随即的观点,请作者不必作为参考。
且说自己的一点观点,TB作者主张组件及积木话,试问作者,您的整体解决方案,能否积木化,不是目前层次的积木化,而是将UI、DAO甚至控制层及其他各个层次积木化,也就是向hibernate只提供数据层方案,或者像ext只提供Ui方案,这样开发者可以选择其中一个几个方案使用,开发者也可以在不进行变动目前架构情况下引入TB积木。此乃共赢。正所谓各个击破。先称霸一方才能一统天下。
39 楼 lishidi 2011-11-17 14:29
LZ的思想很好,希望楼主可以出一个开发手册,对于团队项目对于整个模型的设计至关重要!!
38 楼 lonelybug 2011-10-13 20:25
果然跟搭积木一样,一通堆。
37 楼 auzn 2011-10-13 16:49
楼主 车工?
36 楼 LUX 2011-10-13 11:00
套娃模型是什么意思?????
35 楼 allbin1983 2011-10-13 09:37
介绍的还是很清楚的,
ltian 写道
lzzgym 写道
这种所谓的开发平台,依本人经验,应该是只适合自己团队使用。 另一个公司的团队一般都不会采用的,每个公司的业务情况相差很大,不是一个开发平台能通吃的。刨除一个学习成本的问题,如果团队不能完全hold住这个框架,那是一个极大的风险,做技术评估的时候谁敢承担此风险??   如果团队整体水平很高,这样的团队一般不屑于使用别人的平台,高手看别人的东西都是挑三拣四的。
一家之言。。。


因此,适合国情的发展方式应为:闭源,忽悠,搞定关键人物,收钱走人!


我支持楼主的贡献精神,只要坚持下去,做的够好,可以解决开发遇到的痛点,把产品做的精细,还是会有市场的。
因为之前的开源产品忽悠的太多,做不几天就放弃了,时间是检验真理的标准。
欢迎访问:http://demo.simpleframework.net/developer/d.jsp
34 楼 zhangwd118 2011-10-13 09:35
chrome下没问题,ie8下menubar下单子item无法显示名称,一片空白。难道是我浏览器的问题?
33 楼 ltian 2011-10-12 21:35
lzzgym 写道
这种所谓的开发平台,依本人经验,应该是只适合自己团队使用。 另一个公司的团队一般都不会采用的,每个公司的业务情况相差很大,不是一个开发平台能通吃的。刨除一个学习成本的问题,如果团队不能完全hold住这个框架,那是一个极大的风险,做技术评估的时候谁敢承担此风险??   如果团队整体水平很高,这样的团队一般不屑于使用别人的平台,高手看别人的东西都是挑三拣四的。
一家之言。。。


因此,适合国情的发展方式应为:闭源,忽悠,搞定关键人物,收钱走人!
32 楼 cloudsinger 2011-10-12 11:38
ToyBricks平台开发的部分产品界面截图
http://cloudsinger.iteye.com/blog/1190491
31 楼 cloudsinger 2011-10-12 11:36
呵呵,感觉大家的支持,希望大家多多拍砖,多提意见建议,我们会努力把平台做的更好

ToyBricks平台开发的部分产品界面截图
http://cloudsinger.iteye.com/blog/1190491
30 楼 wenxiang_tune 2011-10-12 11:00
其实我觉得这个很不错,我有空去研究一下。
29 楼 peak 2011-10-12 10:50
我觉得挺好了,开源的话即使不用,也可以拿源代码做参考
28 楼 cloudsinger 2011-10-12 09:59
lzzgym 写道
这种所谓的开发平台,依本人经验,应该是只适合自己团队使用。 另一个公司的团队一般都不会采用的,每个公司的业务情况相差很大,不是一个开发平台能通吃的。刨除一个学习成本的问题,如果团队不能完全hold住这个框架,那是一个极大的风险,做技术评估的时候谁敢承担此风险??   如果团队整体水平很高,这样的团队一般不屑于使用别人的平台,高手看别人的东西都是挑三拣四的。
一家之言。。。


ToyBricks体系并非想“一个开发平台通吃”所有的开发者需求。事实上,ToyBricks是微内核的,最基础核心只有ToyBricks Base,这是实现“面向积木编程”的基础,其他的一切都是从这里衍生出来的,作为RIA层面,ToyBricks RIA是核心,主要提供:
1.RIA组件编程模型(API);
2.组件运行时管理;
3.组件上下文支持;

平台的层次结构为(自底向上):

积木模型基础,Aquarell模板引擎
RIA
常规组件库(UI类,数据源,Dao等)
开发者自扩展组件库

ToyBricks平台留出了充分的扩展,包括RIA自身也提供了很多扩展点,例如,如果您想针对每个请求进行拦截或针对抛出的异常进行拦截,可以针对组件“cloudsinger.ria”的扩展点“getExtender”进行扩展

ToyBricks很像插件化体系的OSGI,想想Eclispe,其伟大之一在于微内核,道生一、一生二、二生三、三生万物的扩展出来,ToyBricks也是这样,例如,您可以开发一个留出足够扩展点的“CMS”,其他人来扩展你的扩展点以实现自己的功能,同时可以再留出扩展点以供其他人扩展,而且,ToyBricks的扩展点机制比OSGI简单的多
27 楼 vb2005xu 2011-10-12 09:53
又是一个用着GPL产品做商业产品的
26 楼 cloudsinger 2011-10-12 09:43
在ToyBricks中的“面向积木编程”绝非噱头,而是真的将积木模型引入了开发的方方面面,刚才有朋友说到了持久层的问题,我这里就此简单解释如下:

【场景】通过数据表格对某张数据表实现CRUD,在添加(Create)同时向另外一张表中添加数据;

【面向积木(OBP)视角下的开发步骤】
1.识别积木块,满足本场景需要,检查当前现有的组件库,发现有以下组件满足需要:

   数据展现、操作的UI:数据表格组件---DataGrid;

   对数据库的操作:数据源组件-----DataSource;

   数据源组件的Facade:Dao组件----Dao;

   还有一段逻辑“在添加(Create)同时向另外一张表中添加数据”当前组件库中没有,需要单独开发,此外,需要给出DataGrid获取数据的SQL(这不是唯一的方式,如文中例子直接给出数据集,还有很多其他的方式),此处假定这些逻辑最终为组件N----CN;

2.分析并连接所有的积木块,关系如下:
   DataGrid依赖于Dao-----获取数据(R)、持久化(C、U、D)(这里解释一下,ToyBricks下的组件一般都具备完整的功能集,比如DataGrid组件,其自身具备对数据对象通用的CRUD功能(这一点与当前的如JSPTag、Flex、JS等等组件有根本差别,当然可以混搭形成一统V/B/P三层的组件模型,但是总是不伦不类),当DataGrid自身的功能不能满足要求是,可以通过“扩展”的手段进行扩充甚至覆盖);

   DataGrid依赖于CN(DataGrid的“依赖项(可以参阅我的博客http://cloudsinger.iteye.com)”--getJpaSql由CN来满足);

   Dao依赖于DataSource-----实际的数据库动作来自DataSource;

   CN对DataGrid进行扩展-----扩展其C的功能(实现DataGrid持久化数据后(after)向另外一张表添加数据,且使用同一事务);

3.开发CN,代码片段如下:
 
	/**
	 * 满足视图中表格组件的依赖项(getJpaSql)
	 * 
	 * @return
	 */
	@_JunctionTo("view/grid:getJpaSql")
	public String getGridJPSql() {
		return "select t from DO_KnowledgeSubject t where t.cfId='" + cfId
				+ "'";
	}

	/**
	 * 扩展表格的持久化动作,在添加数据后进行其他操作
	 * 
	 * @param _content
	 */
	@_JunctionTo("view/grid:afterAdd")
	public void bd(DO_KnowledgeSubject _subject) {
		DO_KnowledgeAnswer.deleteBySubjectId(_subject.getId());
		// TODO 删除索引 ------------
	}

25 楼 lzzgym 2011-10-12 09:41
KimHo 写道
lzzgym 写道
这种所谓的开发平台,依本人经验,应该是只适合自己团队使用。 另一个公司的团队一般都不会采用的,每个公司的业务情况相差很大,不是一个开发平台能通吃的。刨除一个学习成本的问题,如果团队不能完全hold住这个框架,那是一个极大的风险,做技术评估的时候谁敢承担此风险??   如果团队整体水平很高,这样的团队一般不屑于使用别人的平台,高手看别人的东西都是挑三拣四的。
一家之言。。。

你说出了国内众多开发平台的杯具之处


现在很多人好像一听说三大框架,就很鄙视似的,其实又有几个人把三大框架研究得很深呢?公司招聘人员
KimHo 写道
lzzgym 写道
这种所谓的开发平台,依本人经验,应该是只适合自己团队使用。 另一个公司的团队一般都不会采用的,每个公司的业务情况相差很大,不是一个开发平台能通吃的。刨除一个学习成本的问题,如果团队不能完全hold住这个框架,那是一个极大的风险,做技术评估的时候谁敢承担此风险??   如果团队整体水平很高,这样的团队一般不屑于使用别人的平台,高手看别人的东西都是挑三拣四的。
一家之言。。。

你说出了国内众多开发平台的杯具之处


所以,你可以拿自己的东西出来交流交流,但说服人家使用你的东西又是另外一码事了,想靠卖平台发财,国内好像除了普元(不过据了解也没有吹的那么好)好像还真没有其他的。。。
24 楼 shuaiji 2011-10-12 09:25
新东西层出不穷,如果一位追求最新的,到最后什么也没有学会。彻底放弃那些传统的架构为时过早

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • “像搭积木一样开发应用”--开源的ToyBricks(积木)开发平台

    NULL 博文链接:https://cloudsinger.iteye.com/blog/1187676

  • php5构造函数与析构函数

    文章分类: Php | 没有评论 » 发布日期: 4月 8th, 2008 由 Darren 构造方法与析构方法大多数类都有一种称为构造函数的特殊方法。当创建一个对象时,它将自动调用构造函数,也就是使用new这个关键字来实例化对象的时候自动调用构造方法。构造函数的声明与其它操作的声明一样,只是其名称必须是__construct( )。这是PHP5中的变化,以前的版本中,构造函数的名称必...

  • Z平台-开源免费的JAVA快速开发平台

    Z平台是开源免费的Java Web快速开发平台。通过Z平台集成开发环境,以零编码、动态配置的方式能够快速开发出各类Web管理系统。Z平台框架组成所用到的各种功能组件与框架,都是开源免费的,不涉及到版权问题,商业与非...

  • 10大开源的快速开发平台—架构师必看

    低代码 / 无代码指的是提供可视化开发工具,支持拖放,内置组件浏览器和逻辑构建器。低代码 / 无代码的概念并不新鲜,这可以追溯到十多年前的无代码编程技术 (PWCT) 以及类似的系统。然而,这一概念在开发人员社区...

  • 微信公众开放平台开发 -智能机器人java源代码工程

    微信公众开放平台开发 -智能机器人java源代码工程 刘峰的博客说明已经很详细了, 本人旨在帮助刚入门微信公众平台开发苦于无法着手而迅速上手准备的, 有不明白的请联系我或微信号guestsun。 导入整个工程到...

  • 猿创征文|低代码开发15个高效开源项目推荐

    低代码开发平台(LCDP)是无需编码(0代码)或通过少量代码就可以快速生成应用程序的开发平台。通过可视化进行应用程序开发的方法,使具有不同经验水平的开发人员可以通过图形化的用户界面,使用拖拽组件和模型驱动...

  • 18个最受欢迎的低代码开发平台【开源】

    低代码/无代码开发平台使用图形向导构建软件,而不是像传统方法那样使用计算机编程语言来构建应用程序。在本文中,我们介绍面向个人和企业用户的18个开源的最佳低代码/无代码平台。 低代码/无代码指的是提供可视化...

  • 用虚幻4开发搭积木的VR游戏

    用虚幻4开发搭积木的VR游戏 2016 年 9 月 23-24 日,由 CSDN 和创新工场联合主办的“MDCC 2016 移动开发者大会• 中国”(Mobile Developer Conference China)将在北京• 国家会议...

  • C/C++开发人员要了解的几大著名C/C++开源库

    本文详细讲述C/C++开发人员需要了解的几大著名C/C++开源库。

  • 跨平台开源集成开发环境Eclipse

    Eclipse 详细介绍Eclipse是著名的跨平台的自由集成开发环境(IDE)。最初主要用来Java语言开发,但是目前亦有人通过插件使其作为其他计算机语言比如C++和Python的开发工具。Eclipse的本身只是一个框架平台,但是...

  • 推荐一个开源低代码开发平台 Corteza

    100%免费的开源平台了。我查了将近十多个开源低代码平台,发现大部分开源平台,都是分了开源版本和商业用的版本。要么是开发应用数量的限制,要么是用户数量的限制。流程定制页面(这条流程是我制作的工作空间中,...

  • JimuReport积木报表,一个好用的开源免费的报表平台

    JimuReport积木报表是一款集成报表设计和大屏设计的在线报表平台,使用起来简单方便,可以帮助用户像excel一样设计页面。 使用积木报表平台,用户不仅10分钟就可以设计一个炫酷大屏,还能在平台快速制作各种报表,...

  • 顶级的 18 款开源的低代码开发平台,经典收藏

    点击上方“Github中文社区”,关注 触达Github项目 文 | 白开水出品 | OSC开源社区低代码成了企追求的主流目标,与使用计算机编程语言构建应用程序的传统方法不同,低代码开发...

  • 低代码开发之开源数据可视化分析平台datagear

    DataGear是一款开源免费的数据可视化分析平台,自由制作任何您想要的数据看板,支持接入SQL、CSV、Excel、HTTP接口、JSON等多种数据源。系统基于Spring Boot、Jquery、ECharts等技术开发。数据分析底层模块,定义...

  • java桌面应用开发利器JavaFx

    与C#等开发架构不一样的是,采用javafx开发的应用,由于其天生的跨平台特性,可以完美得运行在windows、mac、linux等不同操作系统中,这也是当前国产化,自主可控的一种要求。 1、javafx简介 JavaFX 是一个开源的下...

  • Java使用开源Rxtx实现串口通讯 串口开发

    Java使用开源Rxtx实现串口通讯 串口开发,里面包含实例,下载后按自己的要求进行修改即可(仅限对java有基础的人员)。

  • 零代码快速开发平台开源了

    零代码快速开发平台出售 可开发微信小程序、公众号、CRM、ERP、MES、网站等管理系统,自动工作流、无需代码即可完成需要的程序。节约成本50%以上。 联系我:QQ:21707686 ...

  • 【转载】Go语言开发工程师一定要熟读的5个开源项目

    写代码同写文章一样,既是技术活,又是艺术活。...因此,本文针对Go语言,推荐大家5个非常优秀的开源项目,这些开源项目不仅应用广泛,而且其中所用的技术有很多基础技术,是做其它任何项目都不可或缺的。

  • php5安装详解

    以PHP for Apache as CGI binary方式为例,我喜欢用这种方式。以安装目录c:/php为例;[1]将原先的php安装目录删除,解压php-5.0.0-Win32.zip到c:/php重命名php.ini-dist为php.ini(跟php4一样)[2]修改Apache的httpd.conf文件。将原有跟php4邦定的语句删除。用以下这几行代替:ScriptAlias /php

Global site tag (gtag.js) - Google Analytics