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
 

我的同类文章

JAVA(7) 本人作品(20)
 

参考知识库

大型网站架构知识库

1098关注|532收录

Java EE知识库

1120关注|581收录

MySQL知识库

8381关注|1396收录

Java SE知识库

9391关注|454收录

Java Web知识库

9681关注|1017收录

猜你在找
查看评论
1楼 cszdm 2012-12-30 14:09发表  [回复]
刚好项目需要也遇到这个选择问题~请问楼主最后选择c#开发过程遇到过什么问题?是否可以分享一下一些开发经验。因为项目只有我一个人开发,SSH服务端+C# 从来都没有接触过C#还真不知从何下手
 
您还没有登录,请[登录][注册]
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
 
 
 
 
    个人资料
 
 
    • 访问:616038次
    • 积分:9648
    • 等级: 
    • 排名:第1136名
    • 原创:291篇
    • 转载:55篇
    • 译文:3篇
    • 评论:363条
    文章搜索
    文章存档
    最新评论
 
 
公司简介|招贤纳士|广告服务|银行汇款帐号|联系方式|版权声明|法律顾问|问题报告|合作伙伴|论坛反馈
网站客服杂志客服微博客服webmaster@csdn.net400-600-2320|北京创新乐知信息技术有限公司 版权所有|江苏乐知网络技术有限公司 提供商务支持
京 ICP 证 09002463 号|Copyright © 1999-2014, CSDN.NET, All Rights Reserved 

 

客户端是选择Java Swing还是C# Winform的更多相关文章

  1. Java客户端工具选择:HTML?Swing?XML?

    整理下面的文章是因为个人觉得写的很好,关于java的客户端了解也并不是太多.看了下面的文章觉得很有必要贴出来,方便自己以后了解java客户端编程. Java软件设计师和管理人员经常会面临这样的难题:在 ...

  2. Java Swing客户端小项目

    记录一下两个用java swing写的客户端. 项目1: 关键词:swing  jtable 代码如下: 1.主类: package com.my.agent.client; import java. ...

  3. paip.web数据绑定 下拉框的api设计 选择框 uapi python .net java swing jsf总结

    paip.web数据绑定 下拉框的api设计 选择框 uapi  python .net java swing jsf总结 ====总结: 数据绑定下拉框,Uapi 1.最好的是默认绑定..Map(k ...

  4. atitit.软件开发GUI 布局管理优缺点总结java swing wpf web html c++ qt php asp.net winform

    atitit.软件开发GUI 布局管理优缺点总结java swing wpf web html c++ qt php asp.net winform 1. Absoluti 布局(经常使用) 1 2. ...

  5. Java Swing窗体小工具实例 - 原创

    Java Swing窗体小工具实例 1.本地webserice发布,代码如下: 1.1 JdkWebService.java package server; import java.net.InetA ...

  6. Atitit.java swing打印功能 api  attilax总结

    Atitit.java swing打印功能 api  attilax总结 1. 打印方式有三种:2 1.1. 一是不经过任何修改,直接调用javascript中的window.print()打印.2 ...

  7. java swing+socket实现多人聊天程序

    swing+socket实现多人聊天程序 1.准备工作 先看效果: 客户端项目结构图: 服务端项目结构图: 2.运行原理 服务端 先开一个线程serverListerner,线程中开启一个Server ...

  8. 恶补Java Swing线程刷新UI机制(由浅到深的参考大佬博文)

    1. java中进度条不能更新问题的研究 感谢大佬:https://blog.csdn.net/smartcat86/article/details/2226681 为什么进度条在事件处理过程中不更新 ...

  9. Java swing项目-图书管理系统(swing+mysql+jdbc) 总结

    (一)java Swing的学习. (1)学习如何安装windowbuilder插件的安装. <1>在eclipse中点击help <2>在help的下拉选中选择install ...

随机推荐

  1. ExecuteNonQuery返回负数

    用 ExecuteNonQuery 执行sql语句"select * from table where id=@id"如果检索出符合条件的ID ExecuteNonQueue 会返 ...

  2. apache 创建虚拟目录

    <VirtualHost *:83>    DocumentRoot "E:\PhpProjects"</VirtualHost><Directory ...

  3. HDOJ(HDU) 1708 Fibonacci String

    Problem Description After little Jim learned Fibonacci Number in the class , he was very interest in ...

  4. git bash中避免在push时反复输入用户名和密码

    我用的是windows系统,这几天学着使用git时发现每次使用git push时每次都要输入一遍用户名和密码,感觉特烦,特意上网查了下,找到了简化方法.虽然不是原创,但至少算是加了点自己的心得和经验吧 ...

  5. Java语言与JVM中的Lambda表达式全解

    Lambda表达式是自Java SE 5引入泛型以来最重大的Java语言新特性,本文是2012年度最后一期Java Magazine中的一篇文章,它介绍了Lamdba的设计初衷,应用场景与基本语法. ...

  6. 15个不起眼但非常强大的 Vim 命令

    如果我的关于这个话题的最新帖子没有提醒到你的话,那我明确地说,我是一个 vim 的粉丝.所以在你们中的某些人向我扔石头之前,我先向你们展示一系列“鲜为人知的 Vim 命令”.我的意思是,一些你可能以前 ...

  7. <a>标签的href属性

    <a> 标签的 href 属性用于指定超链接目标的 URL. 语法 <a href="value"> 属性值 值 描述 URL 超链接的 URL.可能的值: ...

  8. Windows7 64位系统搭建Cocos2d-x 2.2.1最新版以及Android交叉编译环境(具体教程)

    原文地址:http://blog.csdn.net/sttyytw/article/details/17005263 声明:本教程在參考了下面博文,并经过自己的摸索后实际操作得出,本教程系本人原创,因 ...

  9. Zend框架2入门(二) (转)

    Zend框架2使用一个模块系统,和你组织内每个你的主应用程序特定代码模块.骨架提供的应用程序模块是用于提供引导,错误和路由配置到整个应用程序.它通常是用来提供应用水平控制器,比如说,应用程序的主页,但 ...

  10. Jetty开发指导:框架

    Spring设置 你能嵌入Jetty到你的项目中,也能够使用差点儿全部的IoC类型框架,包含Spring.假设全部你想做的是在你的Spring中设置Jetty Server,那么以下的xml片段能够作 ...