`
xiaozhonghua
  • 浏览: 253781 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

免费ERP第一锤:用Swing这个可以

阅读更多


前面几篇《Swing大刀》的探讨,引起了大家对Swing技术的兴趣,也引来了不少的口水和砖头。最近在JavaEye上已经可以看到不少高质量的Swing讨论和应用介绍,这已经是很大的变化。不过更多的同学对Swing的应用还是比较茫然甚至怀疑:Swing能做大型应用么?今后我想讨论一些Swing在大项目中实践,是更有意义的事情,总比单纯的技术口水要有聊一些。

 

这些年大家都在说:Swing学起来费劲,用的也不多,见到的应用也不多,能做大型应用么?最近还有朋友看了几刀之后就说,哎呀快去学Swing吧,做东西好漂亮!其实这不仅让人哭笑不得:几年前大家还是一边倒的打骂Swing太丑,都说Flex啥的漂亮,突然有人夸起Swing做东西漂亮来了,还真很不适应。还有人说,Swing快不行了,Sun也不行了,Oracle也不行了....其实在他们眼里,也许Java也不行了,软件开发也不行了....那到底Swing做大应用能行吗?通过自己参与的项目经验来说:这个真的行!

 

这几年一直在做Swing的开发,有幸参与了公司一个大型的ERP项目。这个ERP项目规模很大,我的NetBeans工程里就有150多万行代码,还不包括其他小组的分支模块。前端除了桌面客户端外,还有浏览器和手机终端,不过最重要的还是Swing版的桌面客户端。这个Swing版的ERP客户端开发了已经7年多了,JDK从1.3一直升级到现在的1.6,IDE也从IDEA、JBuilder到Eclipse、NetBeans。不过核心框架一直没有什么大变化,应用也比较成熟。

 

这是一个大型的ERP系统,典型的C/S结构,也混合了一些B/S结构和手机终端的模块,不过主要内容还是在庞大的后端和Swing的前端。后端主要用J2EE架构搭建,通过JBoss应用服务器和MySQL数据库,Hibernate做O/R,自己封装DAO层以及Business层控制业务逻辑,再用Ejb进行业务API封装。最后,通过一个Facade层的EJB(后来改造成Servlet)对外提供统一的访问接口。这个接口也是整个后台唯一的访问接口,这个“一夫当关、万夫莫开”的入口处,再插入登录和会话管理、安全控制、日志记录、请求分发等机制,干净简洁。通讯协议,以前通过EJB和IIOP的协议开放API提供远程调用,后来发现EJB的通讯非常异常繁琐和“重”,各种控制比较复杂,效率也不好。后期版本改造为用一个Servlet封装对外提供接口,协议也变成了HTTP。这样,后台通过一个80端口,以类似WEB的方式统一提供前端的API访问。对很多人来讲,这个方式可能有点奇怪:Swing的胖客户端,还用HTTP的WEB协议来访问后台。嘿嘿,其实这一招不错哦,仔细琢磨一下会体会到其妙处。

 

前台是一个完整的Swing程序,也是通过层层封装,提供了一层与服务器一一对应的API访问层,最后通过一个统一的代理类,对后台进行访问。通过HTTP如何传输Java对象呢?我们没有使用Web Services之类的技术,而是直接把要调用的方法以及参数等信息序列化,以HTTP方式提交后台,后台通过模块分发、反射的方式执行函数后, 把结果数据进行序列化,再经过压缩,通过HTTP返回客户端。客户端将数据解压、反序列化,将对象再返回API的调用者(如各个界面、按钮等)。这个结构非常高效、可靠。甚至包括函数的异常等,都可以通过序列化进行传递。

 

通过HTTP的方式,服务器不再需要防火墙开放更多端口,和web应用一样,一个80就行了。另外,和web传递html等信息不同,这种结构下,中间传递的就是压缩过的Java对象序列化后的字节流,其效率是很高的。客户端是胖结构,自然可以处理更多的数据处理和呈现,比浏览器也有优势,很合适ERP这种企业应用。轻量、高效的结构也提供了很好的业务支撑能力:一台普通的台式机可以提供100个ERP用户同时在线、比较流畅的使用。这对于没有专门预算购买专业服务器和建设机房的企业来说,是非常给力的。

 

至于Swing的客户端是否能做的好看,这个就要看是否用心了。只要用心,什么UI技术其实都无所谓,都可以做出漂亮的应用。这里提供两张贴图,是否好看还是仁者见仁、智者见智了。

 


 

 

通过这两年的Swing开发,也总结了一点经验,和大家分享:

 

  • Swing入门较高,有一定的学习曲线。企业在选择是否采用Swing技术之前,一定要分析是否合适自己的团队。如果没有一个半个Swing比较好的骨干带领,Swing的复杂度很容易让整个项目代码失控,最后变成一个“好大好大好大的垃圾堆”。
  • 代码要尽量一层一层的搭框架,不断的重构、优化、复用,不可每个人按照自己喜好自搞一套,否则很容易失控;代码和风格甚至开发工具都要尽量一致,避免维护的麻烦。
  • 找一个好的美工。美工设计很重要,他(她)会从不同于程序员的眼光来创建和设计UI,我们一定要尊重美工的设计思路,不要轻易指手画脚、大放厥词。术业有专攻,要知道,在美术方面咱们程序员大多是小学生水平。一旦设计风格确定,就严格按照统一的风格进行开发,每一个对话框、每个按钮、每个图标。让一个ERP中成千上万的对话框都“如出一辙”确实不易,不过应当是目标。
  • 永远从“用户”角度设计UI。开发UI也是设计的过程,美工没可能把一个ERP系统中成千上万的对话框都设计出来,程序员这时候就是半个美工、半个用户。让大脑里时刻存在一个“用户”并时刻敲打自己:这个界面好用吗?这个报表能看懂吗?这个按钮位置合适么?做软件就像盖大楼,地基结实固然重要,窗户密封性就不重要了吗,外墙涂料就不重要了吗?要做百年屹立的优质工程,就得处处关注细节。别忘了房子是用来住的,软件是用来用的。
再对这个ERP简单介绍一下。这是一个专门针对制造行业设计的大型ERP,模块涵盖工程设计控制、图纸、物料、物料清单、采购、销售、库存、MRP、生产、工单、质量、财务、客户服务、人事、安全等等。尤其适合“按单生产”类型的离散型制造企业。用户有Wexford、Whetherford等国际巨头,也有中海油这样的大型国企,更多的是中小企业,我还碰到过只有一台电脑的私人老板,也在用我们的ERP,而且用的还很不错,很匪夷!

最后再说一个难以置信的事实:这是一个免费软件。呵呵,这年头,ERP软件都可以免费,没错,完全彻底的免费,自己玩、商用、学习.......随便啦。

感兴趣的朋友到网站拖一个下来耍耍,希望会对Swing的能力信心爆棚。不过中文版还在紧张翻译中,需要一段时间才能提供下载。先玩玩英文版吧,相信大家的英文都可以应付。网站是:www.2bizbox.com,点击就能下,不需要注册。

 

补充:上面有两个下载:一个是exe的setup安装,一个是直接解压即可运行的zip包。后台其实也可以跑在linux等上面,启动脚本需要自己写一下了。

 

欢迎喜欢Swing和ERP的朋友一起探讨,祝大家元旦快乐!


前几天菜市场买了一个风信子,开始水培。



 
 
  • 大小: 142.5 KB
  • 大小: 132 KB
  • 大小: 136 KB
分享到:
评论
26 楼 amnotsuperior 2011-01-03  
winrar : 无法 作为压缩文件打开
25 楼 amnotsuperior 2011-01-03  
无法作为压缩文件打开
24 楼 xiaozhonghua 2011-01-03  
luorongda 写道
怎么下载下来运行不起来的呢.

下载的exe还是zip,后台还是前台无法运行?详细说一下
23 楼 hantsy 2011-01-03  
zhajie 写道
eredlab 写道
年度巨献啊  抓回来看看!偶有一个EclipseRCP(SWT/JFace)+JEE(中间通过Httpinvoker通信)的计划。不知楼主对这种方式有心得否?


中间层还可以采用hessian,ejb通信。hessian比较推荐,因为他的前端可以不限于使用java,.net,delphi都可以用。

我觉得还是用 REST的方式比较理想,完全将客户端和服务器分开,而REST 服务器端 API为 REST Producer,桌面程序,手机内置界面(或HTML5界面)和Web界面程序都可以作为REST Comsumer。
22 楼 luorongda 2011-01-03  
怎么下载下来运行不起来的呢.
21 楼 lgcpeter 2011-01-03  
2011年度第一个给力的帖子!
20 楼 xiaozhonghua 2011-01-02  
wangchao719 写道
下载中,不过貌似只有一个exe,有没有Linux版本的?

可以再去看看,上面已经有zip的下载包了。
19 楼 Sunny_kaka 2011-01-02  
不像是中国公司.
不过软件倒是很强大!
18 楼 yidao620c 2011-01-02  
相当的给力啊。
17 楼 norwind 2011-01-02  
这个东西很漂亮,不论是不是swing,都可以抢掉客户的视线。

像ERP,PDM等软件,最大的问题是在“实施”。

期望有机会能好好学习。顶!
16 楼 yuyue007 2011-01-02  
很漂亮的界面
15 楼 nethaoke 2011-01-02  
eredlab 写道
年度巨献啊  抓回来看看!偶有一个EclipseRCP(SWT/JFace)+JEE(中间通过Httpinvoker通信)的计划。不知楼主对这种方式有心得否?



其实不要把问题想的那么复杂 可以参考微软的那套数据集DataSet 就可以了  这样就可以不管是cs bs 因为都是对数据集的操作 参考compiere dataweb
14 楼 jacksv123 2011-01-02  
hellojinjie 写道
引用
  • Swing入门较高,有一定的学习曲线。企业在选择是否采用Swing技术之前,一定要分析是否合适自己的团队。如果没有一个半个Swing比较好的骨干带领,Swing的复杂度很容易让整个项目代码失控,最后变成一个“好大好大好大的垃圾堆”。

  • 代码要尽量一层一层的搭框架,不断的重构、优化、复用,不可每个人按照自己喜好自搞一套,否则很容易失控;代码和风格甚至开发工具都要尽量一致,避免维护的麻烦。


对于这两点,我一直很疑惑的就是团队成员之间是如何协调的?

框架由谁来搭建呢,如果由高手来搭建,那搭建框架的时候,其他成员去做什么?还有高手搭建的框架在开发过程中不一定就很好用,也可能会出现问题,这时又该如何解决?

每个程序员之间都有自己的特点,他们之间的代码又如何协调呢?


同感,有时候团队之间协调十分重要,我现在和朋友在做一个入门的项目,但效率往往达不到1+1>=2效果,LZ可以分享一下经验吗?
13 楼 hellojinjie 2011-01-02  
引用
  • Swing入门较高,有一定的学习曲线。企业在选择是否采用Swing技术之前,一定要分析是否合适自己的团队。如果没有一个半个Swing比较好的骨干带领,Swing的复杂度很容易让整个项目代码失控,最后变成一个“好大好大好大的垃圾堆”。

  • 代码要尽量一层一层的搭框架,不断的重构、优化、复用,不可每个人按照自己喜好自搞一套,否则很容易失控;代码和风格甚至开发工具都要尽量一致,避免维护的麻烦。


对于这两点,我一直很疑惑的就是团队成员之间是如何协调的?

框架由谁来搭建呢,如果由高手来搭建,那搭建框架的时候,其他成员去做什么?还有高手搭建的框架在开发过程中不一定就很好用,也可能会出现问题,这时又该如何解决?

每个程序员之间都有自己的特点,他们之间的代码又如何协调呢?
12 楼 windlike 2011-01-02  
贵公司是中国公司?
这东西打算开源么?
11 楼 cantellow 2011-01-02  
用J2EE做后台服务器,与客户端的交流采用http方式,用序列化封装对象。
嘿嘿,第一次听说这种方式,我想问一下,楼主为什么不采用远程调用,或者命令通道以及Apache的activeMQ作为服务器与客户端的交流?
10 楼 eredlab 2011-01-02  
zhajie 写道
eredlab 写道
年度巨献啊  抓回来看看!偶有一个EclipseRCP(SWT/JFace)+JEE(中间通过Httpinvoker通信)的计划。不知楼主对这种方式有心得否?


中间层还可以采用hessian,ejb通信。hessian比较推荐,因为他的前端可以不限于使用java,.net,delphi都可以用。



嗯  hessian可作为可选方案。HttpInvoker使用Java自己的系列化机制,恐怕性能方面要优于hessian。具体没做过测试。等有空了测试一下。HttpInvoker主要限制就是楼上说的服务端和客户端都得基于Java而且都得基于Spring来做。不知道现在.Net版本的Spring能否通过HttpInvoker调用Java的HttpInvoker服务了?
9 楼 zhajie 2011-01-02  
eredlab 写道
年度巨献啊  抓回来看看!偶有一个EclipseRCP(SWT/JFace)+JEE(中间通过Httpinvoker通信)的计划。不知楼主对这种方式有心得否?


中间层还可以采用hessian,ejb通信。hessian比较推荐,因为他的前端可以不限于使用java,.net,delphi都可以用。
8 楼 風一樣的男子 2011-01-02  
[quote="xiaozhonghua"]
永远从“用户”角度设计UI。开发UI也是设计的过程,美工没可能把一个ERP系统中成千上万的对话框都设计出来,程序员这时候就是半个美工、半个用户。让大脑里时刻存在一个“用户”并时刻敲打自己:这个界面好用吗?这个报表能看懂吗?这个按钮位置合适么?


这个给力,其实每一个程序员在做东西的时候都应该这样,可是有些就连最简单的按钮都不对齐
7 楼 yizhilong28 2011-01-02  
spring+swing做过两个项目,抛开技术不说,最麻烦的恐怕是版本控制,部署后的增量更新问题。

相关推荐

Global site tag (gtag.js) - Google Analytics