前面几篇《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的朋友一起探讨,祝大家元旦快乐!前几天菜市场买了一个风信子,开始水培。原文出自:http://joshuaxiao.javaeye.com/blog/857377