今天没事,给大家介绍一个免费开发框架EHT,EHT快速开发及集成应用平台框架,是针对软件开发人员的快速开发框架,该框架封装了满足用户各种需求的相关API函数及UI组件, 通过掌握EHT快速开发框架,可以很轻松的完成各种需求的开发,节约了开发成本缩短了开发周期,并且,通过EHT框架所封装的API, 可以大量避免潜在的bug问题,完全实现了采用30%的代码来完成100%的功能。
EHT开发框架特点:
基于SOA架构体系
学习成本低廉,有点懂java、javascript、html脚本的人员,就能很轻松的掌握开发框架,并完成需求开发任务。
通过EHT快速开发平台框架,可以轻松完成开发任务,并且避免了不必要bug问题。
简单的业务需求开发,甚至不需要写后台的一行java代码,只通过调取EHT封装的UI组件及框架远程调用的API便能轻松完成业务需求。
框架开发规范简单,易读易懂。
开发框架支持多数据库,能很轻松的进行数据库转换,不需要修改业务代码。
开发框架在性能上做了很多工作,优化api算法,最大程度上提升系统性能。
快速开发框架提供了辅助的开发工具,可以直接将 powerdesigner所设计的pdm文件转换成开发框架的模型配置文件及模型文件,提高了开发效率
EHT开发平台框架下载地址:http://www.ehtsoft.com/module/webpage/eht-download.jsp
DEMO演示地址:http://demo.ehtsoft.com
EHT开发平台每天或几天都更新新增功能,具体更新情况请关注 新浪微博:2434634091 @游戏e人
DataGrid 组件
Tree 组件
Accordion 组件
ProgressBar 组件
已有 0 人发表留言,猛击->>这里<<-参与讨论
ITeye推荐
- —软件人才免语言低担保 赴美带薪读研!—
使用JavaScript截图,这里我要推荐两款开源组件:一个是Canvas2Image,它可以将Canvas绘图编程PNG/JPEG/BMP的图像;但是光有它还不够,我们需要给任意DOM(至少是绝大部分)截图,这就需要html2canvas,它可以将DOM对象转换成一个canvas对象。两者的功能结合起来,就可以把页面上的DOM截图成PNG或者JPEG图像了,很酷。
Canvas2Image
它的原理是利用了HTML5的canvas对象提供了toDataURL()的API:
这样的结果是base64编码的(事实上,image也可以通过这种方式以字符串的形式写死到页面上),所以我们还需要一个base64编解码的lib。
但是目前的缺陷也有不少,比如目前Opera和Safari只支持PNG,FireFox的支持性则好得多。
生成图片有两种方式写入页面,一种是生成一个图片对象
class Sample { private static final DateFormat format = new SimpleDateFormat("yyyy.MM.dd"); public String getCurrentDateText() { return format.format(new Date()); } }
从功能的角度上看,单独执行这段代码是没有问题的,但放到多线程环境下,因为SimpleDateFormat不是线程安全的,这段代码就会出错。所以,要想让这段代码正确,我们只要稍做微调:
public class Sample { public String getCurrentDateText() { return new SimpleDateFormat("yyyy.MM.dd").format(new Date()); } }
不知你是否注意到,这里的调整只是由原来的共享format这个变量,变成了每次调用这个方法时创建出一个新的SimpleDateFormat变量。
作为一个专业程序员,我们当然知道,相比于共享一个变量的开销要比每次创建小。之所以我们必须这么做,是因为SimpleDateFormat不是线程安全的。但从SimpleDateFormat提供给我们的接口上来看,实在让人看不出它与线程安全有和相干。那接下来,我们就要打开JDK的源码,看一下其中的代码之丑。
如果你手头没有JDK的源码,这里是个不错的参考。
在format方法里,有这样一段代码:
calendar.setTime(date);
其中,calendar是DateFormat的protected字段。这条语句改变了calendar,稍后,calendar还会用到(在subFormat方法里),而这就是引发问题的根源。
想象一下,在一个多线程环境下,有两个线程持有了同一个SimpleDateFormat的实例,分别调用format方法:
线程1调用format方法,改变了calendar这个字段。
中断来了。
线程2开始执行,它也改变了calendar。
又中断了。
线程1回来了,此时,calendar已然不是它所设的值,而是走上了线程2设计的道路。
BANG!!! 稍微花点时间分析一下format的实现,我们便不难发现,用到calendar,唯一的好处,就是在调用subFormat时,少了一个参数,却带来了这许多的问题。其实,只要在这里用一个局部变量,一路传递下去,所有问题都将迎刃而解。
这个问题背后隐藏着一个更为重要的问题:无状态。
无状态方法的好处之一,就是它在各种环境下,都可以安全的调用。衡量一个方法是否是有状态的,就看它是否改动了其它的东西,比如全局变量,比如实例的字段。format方法在运行过程中改动了SimpleDateFormat的calendar字段,所以,它是有状态的。
写程序,我们要尽量编写无状态方法。
FROM: http://www.infoq.com/cn/news/2012/06/ugly-code-12
已有 0 人发表留言,猛击->>这里<<-参与讨论
ITeye推荐
- —软件人才免语言低担保 赴美带薪读研!—