- 登录 | 注册
mentat的专栏
- 目录视图
- 摘要视图
- 订阅
【专家问答】韦玮:Python基础编程实战专题 【知识库】Swift资源大集合 【公告】博客新皮肤上线啦 快来领福利:C币、机械键盘
客户端是选择Java Swing还是C# Winform
标签: swingc#winformservice浏览器java
2012-03-27 11:38 2191人阅读 评论(1) 收藏 举报
分类:
JAVA(7)
本人作品(20)
版权声明:本文为博主原创文章,未经博主允许不得转载。
客户端是选择Java Swing还是C# Winform?
在某大型项目中,客户要求不能用浏览器作为客户端(即不能用B/S模式),而要采用桌面客户端的方式(服务端用SSH,客户端通过Web Service访问服务端应用,并且还要求能在客户端与服务端网络中断的情况下离线进行部分业务操作,例如查询)。这可给我们项目组提出了一个大问题:客户端应用开发的技术选型。
公司有些员工强烈建议用Java Swing,认为有一些框架可以利用,例如spring RichClient(Swing),大家都对Spring比较熟悉,有亲近感;甚至可以考虑使用 Eclipse RCP(SWT),因为有Eclipse在前面作为成功标杆。并且公司开发人员绝大多是Java程序员,可以随时抽调精兵强将加入任务繁重的客户端开发中,解决技术难题,甚至突击编写普通业务功能。而C#人员要重新招聘,增加了很多不确定因素。
但是采用Swing,缺点是界面比较难看,控件少得可怜,对客户端资源的控制能力差,开发难度肯定高,并且公司内部也没有积累(Java程序员都是做B/S应用的),并且在人力资源市场上,Swing方面但凡有点水平的开发人员工资都高得吓人(在51Job上查了一下);但好处就是应用服务端与客户端都是用的Java,两边的人手可以灵活配置(当然前题是开发人员对于SSH和Swing都要能上手,一是需要一段时间学习,二是人家技能多了,肯定会要求加工资待遇的)。
并且Spring RichClient已经很久没有更新了,最新的版本是1.10,还是2009年6月发布的,在开发技术日新月益的今天,这种更新速度很叫人担心呀!难不成Spring组织已经放弃了这个子项目?!
另又看了一下Eclipse RCP,最近的更新是2009年8月的,也是叫人心里没有底呀!
而采用C# Winform,界面好看多了,界面控件也很丰富(MS自己的,第三方的都有很多),并且RAD开发平台是MS的绝对强项,客户端运行速度也不错,安装升级很方便,人力资源市场上应用有不少储备。但要在项目组是加入C#开发人员,对于合理组织人力资源有些不利。并且与服务端人员交流也肯定会存在问题。好在C#是Java之子,双方有太多相似的地方,交流起来难度应当没有想像得那样堪比楚河汉界。
关于运行环境方面的问题,下载一个Jre,大约15M;而下载一个.net Framework大约40M。看上去.net的运行环境比Java大得多,但是要注意,从XP Sp3以后所有windows操作系统已经在安装时集成了.net运行环境,也就是说,绝大部分用户是不用下载.net运行环境并安装的。
另外就是开发模式。在Java B/S应用开发中,一般是一个程序员从数据库、SSH到ExtJs全程贯通。好处是效率高,坏处是人员分工不明确,接口定义很随意。
在大型应用开发中,服务端与客户端的开发人员还是要分组比较好。服务端应当定义良好的接口,并且使用完备的测试用例保证其正确性与可用性。而客户端开发人员则着重于用户界面的处理,然后根据服务端的接口文档调用即可。
其实将服务端与客户端完全隔离开来也有其不利因素,就是人员交流成本会有相当程度的提高,服务端要为客户端定义明晰的接口方法,提供完备的接口文档,以方便客户端理解与调用,并且还要为自己的服务端写测试用例,以确保接口功能实现正确性。
但其有利因素也让人心动,就是提高了应用系统的模块化程度,逼迫设计人员精心划分模块、仔细设计接口,不象以前服务端(SSH)与客户端(ExtJs)都是一个人在做开发,很多本应当明确定义的接口,开发人员都只是按自己的意愿随意设计修改。同时,集成第三方应用时,也不用专门费时费力再开发接口,只是将已经设计实现的接口包装一下,加上权限等对第三方的限制条件即可。
我们公司作为一家以客户为导向的应用系统服务型公司,在技术上不应做太多、太深入研究,跟着主流和客户的要求走就没有错!现在服务端的主流是什么?Java(SSH)。客户要求客户端不用浏览器,要做成桌面应用,那现在桌面应用开发的主流是什么?C#WinForm(或者WPF)。桌面应用要求跨平台吗?不用。现在对外发布远程应用接口的主流是什么?Web Service,那我们服务端与客户端的通讯方式就只有采用Web Service。
看上去采用Java的长处很明显,短处也很明显,带来的风险也大。而C#一切都显得很中庸,但相应的风险也小。我们还是取中庸之道吧!Java Server+C# Client。
另外,根据同事提出的不同意见,有以下几点说明:
1、在网络上,开发人员公认C# Winform或者WPF的界面库肯定比Java Swing的丰富得多。可能是概率的问题,我们运气不好,正好没有找到,或者没有合适的人来进行这方面的工作;如果有可能,我们可以在下一步用WPF库(反正.net运行环境已经安装了);
2、在客户端,主要的工作是用户界面处理,这方面不会用到复杂的C#语法与语言特性,主要是对控件的使用(界面事件的响应代码占到60%以上),在这方面编程中,C#与Java在语法上的差别不是太明显,要求人员通吃两边的难度确实不大,对Java开发人员来说,主要是学习熟练使用VS界面及界面控件;
3、关于Web Service的问题,我觉得采用Json是一种选项,实际上.net中也有原生Json处理类。但采用文本方式传递对象产生很多摸名其妙的问题,例如我在服务端一个应用接口中加了一个字段,或者改了字段类型、长度,如果在客户端有几个功能都用到了这个接口,有的可能会正常使用,有的可能会报错,这样给客户端开发、调试及测试带了很多额外负担(困惑与不一致)。如果采用严格的对象接口,在调用时就会全部报错,实际上对开发工作更加有利。并且生成接口看似增加了工作量,实际上可以一次生成,多次使用,而Json格式可能会由各个客户端开发人员各自解析与理解,反而耽误时间,也更有可能出错(当然也可以写一个中间层,统一转换成对象接口,但增加了工作量及出错的可能性)。客户端Web Service接口的生成在VS中是很简单的,可能我们没有找到合适的方法吧?实际上客户端应当有专门的Web Service接口处理工作岗位来统一管理配置Web Service接口,生成桩代码、数据传输实体类及DLL接口库,并提交给其他开发人员直接调用即可,这也是分层开发的要求,不过我们现在没有设置这样的人员岗位而已,这也是我们组建结构合理的C#开发团队的要求之一。
4、因此,问题的根源还是在于人事。项目开始时,我们有成熟的Java框架,有熟练的开发人员,但在C#方面,没有成熟的框架,也没有开发人员,找了一两个新人就开始搭建如此重要的客户端技术框架,这完全是“事倍功半”的做法,但项目进度与人事安排的困难在那里,这也是没有办法的办法。如果一开始就能找到合格的C#的技术架构师,能带来成熟的框架(就象我们在Java服务端的),后面的问题都不会出现。
5、最后,值得高兴的是,现在客户端开发的最困难时期已经过去,不管架构好不好,我们的客户端框架已经建起来了,也已经开发了很多实际的应用功能,并且运行也算良好,这就是一个巨大的胜利。我相信,再过一段时间,客户端开发人员结构会日趋合理,框架也会稳定起来,好用起来,开发工作会越来越顺利。
顶0踩 0
- 上一篇公司晚会演讲稿
- 下一篇Web Service调用方式的烦脑
我的同类文章
JAVA(7) 本人作品(20)
- •智能客户端:C/S与B/S的融合2012-11-19阅读844
- •在应用系统中集成文件上传下载的技术解决方案2012-06-19阅读945
- •我的DS架构尝试过程2007-01-26阅读966
- •关注Destktop Application Server Application2007-01-26阅读836
- •Web Service调用轻量级安全解决方案2012-06-19阅读912
- •关于MDA/BPM/SOA的随想2008-06-30阅读659
- •我的JAVA开发架构设想2007-01-26阅读1363
参考知识库
大型网站架构知识库
1098关注|532收录
Java EE知识库
1120关注|581收录
MySQL知识库
8381关注|1396收录
Java SE知识库
9391关注|454收录
Java Web知识库
9681关注|1017收录
猜你在找
使用C#开发信息管理系统C#.NET_面向对象编程技术Java之路快速掌握JQuery视频教程零基础学HTML 5实战开发(第一季)
HTMLSwing还是XMLJava客户端工具选择三 java swing 通过hibernate连接数据库的客户端登录C#WinForm利用Web Service API查询数据库并显示到客户端C# Winform里调用系统里默认的邮件客户端C# Winform 客户端架构 调用 REST 传输 Json
查看评论
1楼 cszdm 2012-12-30 14:09发表 [回复]
您还没有登录,请[登录]或[注册]
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
核心技术类目
全部主题 Hadoop AWS 移动游戏 Java Android iOS Swift 智能硬件 Docker OpenStackVPN Spark ERP IE10 Eclipse CRM JavaScript 数据库 Ubuntu NFC WAP jQueryBI HTML5 Spring Apache .NET API HTML SDK IIS Fedora XML LBS UnitySplashtop UML components Windows Mobile Rails QEMU KDE Cassandra CloudStack FTCcoremail OPhone CouchBase 云计算 iOS6 Rackspace Web App SpringSide MaemoCompuware 大数据 aptech Perl Tornado Ruby Hibernate ThinkPHP HBase Pure SolrAngular Cloud Foundry Redis Scala Django Bootstrap
- 个人资料
- 访问:616038次
- 积分:9648
- 等级:
- 排名:第1136名
- 原创:291篇
- 译文:3篇
- 评论:363条 文章搜索文章分类
- JAVA(8)
- 人工智能(72)
- 历史人文(86)
- 攻壳机动队(51)
- 时事军事(63)
- 本人作品(21)
- 编程开发(68)
- 读书笔记(0) 文章存档
- 2013年10月(1)
- 2012年11月(1)
- 2012年06月(2)
- 2012年05月(1)
- 2012年03月(1)
展开
- 阅读排行
- 电子表格使用的35种技巧(10091)
- 《攻壳机动队》全收集(9622)
- 自然语言处理讲义(8781)
- 不停止计划生育,中国还在等什么?(7164)
- 人工智能传奇——关于AI起源与发展的故事 (6366)
- 汉族人的起源(5890)
- 人工智能的认识论问题(4992)
- 赵致真:我们的宇宙(4671)
- 攻壳机动队2无罪:引文掉书袋(4420)
- Haraway赛博宣言:二十世纪晚期的科学、技术、社会女性主义 (4048) 评论排行
- 《攻壳机动队》全收集(31)
- 人工智能传奇——关于AI起源与发展的故事 (24)
- 汉族人的起源(19)
- 攻壳机动队电视版 Stand_Alone_Complex 介绍(16)
- 不停止计划生育,中国还在等什么?(15)
- 对人工智能研究的遐想(14)
- 赵致真:我们的宇宙(12)
- 攻壳机动队2:绚烂的冷酷的幻灭的(11)
- 中国最无耻的五所大学(10)
- 当年运10果断下马是中国民用飞机工业的福音(8) 最新评论
- 对人工智能研究的遐想cleavcat: 是时候改变世界了……
- Web Service调用方式的烦脑cszdm: 求lz给个demo!!我用webservice传递时候list总是出现问题~~lz采用什么方式实现
- 客户端是选择Java Swing还是C# Winformcszdm: 刚好项目需要也遇到这个选择问题~请问楼主最后选择c#开发过程遇到过什么问题?是否可以分享一下一些开发...
- C++程序员常用工具大全zhwheiying3: 我所需要的,给力
- C语言程序运行并将结果保存到文件中a422100231: 恩,写的好
- 中文信息处理 猿小卫:
- 中国的国防工业科技现状令人担忧niujibin168: 每个人都会有自己的观点,作者的话还是有几分道理的,很好啊。。。
- 我的JAVA开发架构设想TzSword: 谢谢博主 希望多写点类似的文章
- 虚拟现实:媒体的终结者xiaolinzi13838: 先看下面一个实例http://www.kbonline.net/vr/WebPlayer.html
- 欲为Java技术大牛所需的25个学习要点叶倾城: Oh my Lady Gaga!!!成为java大牛真不容易!!!
公司简介|招贤纳士|广告服务|银行汇款帐号|联系方式|版权声明|法律顾问|问题报告|合作伙伴|论坛反馈网站客服杂志客服微博客服webmaster@csdn.net400-600-2320|北京创新乐知信息技术有限公司 版权所有|江苏乐知网络技术有限公司 提供商务支持京 ICP 证 09002463 号|Copyright © 1999-2014, CSDN.NET, All Rights Reserved