客户端是选择Java Swing还是C# Winform

 

【专家问答】韦玮:Python基础编程实战专题     【知识库】Swift资源大集合     【公告】博客新皮肤上线啦     快来领福利:C币、机械键盘    
 

客户端是选择Java Swing还是C# Winform 

标签: swingc#winformservice浏览器java
 分类:
 
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)
  • •智能客户端: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

参考知识库

img

大型网站架构知识库

1098关注|532收录

img

Java EE知识库

1120关注|581收录

img

MySQL知识库

8381关注|1396收录

img

Java SE知识库

9391关注|454收录

img

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发表  [回复]
刚好项目需要也遇到这个选择问题~请问楼主最后选择c#开发过程遇到过什么问题?是否可以分享一下一些开发经验。因为项目只有我一个人开发,SSH服务端+C# 从来都没有接触过C#还真不知从何下手
* 以上用户言论只代表其个人观点,不代表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
  • 个人资料
 
mentat
 
    • 访问:616038次
    • 积分:9648
    • 等级: 
    • 排名:第1136名
    • 原创:291篇
    • 转载:55篇
    • 译文: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)
  • 推荐文章
    • *Android官方开发文档Training系列课程中文版:网络操作之XML解析
    • *Delta - 轻量级JavaWeb框架使用文档
    • *Nginx正反向代理、负载均衡等功能实现配置
    • * 浅析ZeroMQ工作原理及其特点
    • *android源码解析(十九)-->Dialog加载绘制流程
    • *Spring Boot 实践折腾记(三):三板斧,Spring Boot下使用Mybatis
  • 最新评论
  • 对人工智能研究的遐想

    cleavcat: 是时候改变世界了……

  • Web Service调用方式的烦脑

    cszdm: 求lz给个demo!!我用webservice传递时候list总是出现问题~~lz采用什么方式实现

  • 客户端是选择Java Swing还是C# Winform

    cszdm: 刚好项目需要也遇到这个选择问题~请问楼主最后选择c#开发过程遇到过什么问题?是否可以分享一下一些开发...

  • C++程序员常用工具大全

    zhwheiying3: 我所需要的,给力

  • C语言程序运行并将结果保存到文件中

    a422100231: 恩,写的好

  • 中文信息处理 

    猿小卫:

  • 中国的国防工业科技现状令人担忧

    niujibin168: 每个人都会有自己的观点,作者的话还是有几分道理的,很好啊。。。

  • 我的JAVA开发架构设想

    TzSword: 谢谢博主 希望多写点类似的文章

  • 虚拟现实:媒体的终结者

    xiaolinzi13838: 先看下面一个实例http://www.kbonline.net/vr/WebPlayer.html

  • 欲为Java技术大牛所需的25个学习要点

    叶倾城: Oh my Lady Gaga!!!成为java大牛真不容易!!!

转载于:https://www.cnblogs.com/iOS-mt/p/5601016.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/256960.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux下怎么编译动态库并且调用

样例描述:我有一个main.cpp文件件,add.cpp ,add.h ,subtract.cpp ,subtract.h文件,main.cpp里面调用加法和减法的函数,把加法和减法准备编译成动态库 libalgorithm.so,然后main调用这…

NDK编译错误expected specifier-qualifier-list before...

基于cocos2d-x在win7下开发android程序,一般都会选择先在win32下调试,等最后再在eclipse环境下安装测试到真机上。期间,要使用到cocos2d-x提供的一些简化方案进行NDK编译(一般使用gcc)。但是,VISUAL STUDIO 2010 C编译…

学习笔记(28):Python网络编程并发编程-死锁与递归锁

立即学习:https://edu.csdn.net/course/play/24458/296445?utm_sourceblogtoedu 1.死锁(Lock()的局限性) 知识点:Lock()只能被获得(acquire)一次,要想再次获得必须释放后才能获得 1)死锁情况…

VScode 快速更改编码格式

1、view下的 Cmmand Palette 下的Change file Encoding simplifiled chinese GB2312

iostat

r/s: 每秒读取的请求数。 w/s: 每秒写入的请求数。 Avgqu-sz: 平均I/O队列长度 Await:平均每次设备I/O操作的等待时间(毫秒) Svctm:平均每次设置I/O操作的服务时间(毫秒),Svctm越接近Await则说明等待时间少 %util:表示设备的繁忙程度,80%表示设备设备已经…

学习笔记(29):Python网络编程并发编程-信号量

立即学习:https://edu.csdn.net/course/play/24458/296446?utm_sourceblogtoedu 信号量(了解):也是一把锁semaphore 1. from threading import Thread,Semaphore,currentThread import time#定义信号量(3把锁) sm Semaphore(3)def task()…

Ajax基础2

什么是服务器 网页浏览过程的分析 如何配置自己的服务器程序(AMP) 什么是Ajax 无刷新数据读取 异步,同步 Ajax基础(2) 使用Ajax 基础请求显示txt的文件 字符集编码 缓存,阻止缓存 动态数据,请求js或(json&a…

动态SQL应用(成绩排名)

Code-- 年级排名和班级排名declare sql varchar(4000),nclassid int,nexamid int select sql select nclassid38 select nexamid19select sqlsqlmax(case scoursename when scoursename then descore else 0 end) scoursename,from (select distinct scoursename from t_card_…

《将进酒》——李白

君不见,黄河之水天上来,奔流到海不复回。 君不见,高堂明镜悲白发,朝如青丝暮成雪。 人生得意寻尽欢,莫使金樽空对月。 天生我材必有用,千金散尽还复来。 烹羊宰牛且为乐,会须一饮三百杯。 岑夫子…

关于windows上的exe可执行程序在黑色窗口运行时候不能点击屏幕,要不然会暂定程序

关于windows上的exe可执行程序在黑色窗口运行时候不能点击屏幕,要不然会暂定程序 2019-12-3 记录

学习笔记(30):Python网络编程并发编程-Event事件

立即学习:https://edu.csdn.net/course/play/24458/296447?utm_sourceblogtoedu threading.Event事件 1.概念及功能:主要是完成线程之间的通信,将另一个线程的运行状态通知给另一个线程 2.使用场景: 1)客户端运行时等待服务器启…

Java操作ftp,上传,下载,删除操作

使用java commons net包中的api可以方便操作ftp操作。 import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream;import org.apache.commons.net.ftp.F…

Dynagen0.11+Pemuwrapper入手麻烦二三事——告诉初学者直路

Dynagen在数度难产后终于诞生了0.11版本,这是个里程碑似的版本,他整合了confDynagen和Pemuwrapper,使得我们在搭建复杂安全环境下的拓扑变得更容易和易于调整。confDynagen的具体介绍这里就从略了,我们着重看下Pemuwrapper的问题。…

第五部分 一阶逻辑等值演算与推理

目录 基本等值式 例1 将下面命题用两种形式符号化, 并证明两者等值: 例2 将公式化成等值的不含既有约束出现、又有自由出现 例3 设个体域D{a,b,c}, 消去下述公式中的量词: 例4 求下列公式的前束范式 推理的形式结构 定义5.3 自然推理系统 构造推理证明的实例 例5 在自然推理系…

从易到难,写一个JavaScript加载器之一

先上代码: 1 (function(global) {2 var createScript, insertScript, makeLoadQueue;3 createScript function(src) {4 var script;5 script document.createElement(SCRIPT);6 script.src "" src ".js";7 return script;8 };9…

关于怎么怎么把 unsingned char 数据转换为 Opencv 的Mat类型,并且吧图像显示出来

1、定义 unsignde char* A; 2、定义cv::Mat B(cv::Size(800,500),CV_8U) 3、使用c语言的 memcpy(B.data, A,800*500)//将A指针的数据复制到B中的数据内存,并且给出内存大小 4最后unsignde char 类型数据就会被转化为Mat类型,并且可以显示出…

学习笔记(31):Python网络编程并发编程-定时器

立即学习:https://edu.csdn.net/course/play/24458/296448?utm_sourceblogtoedu 定时器:threading.Timer 1.概念:定时器就是实现过多久去执行什么事情 2.相关函数 1)Timer(self,interval,function,args()) interval:定时的时间 functio…

vs2012 与 win7 不兼容的问题

我用的是win7 64位系统,所以安装位置那里是“C:\Program Files (x86)”,多了个(x86)。 百度搜索到园子里的师兄给的解决办法http://www.cnblogs.com/mumuliang/archive/2013/08/20/3270628.html 装这个补丁: Update for Microsoft Visual Stu…

Scrum方法论(四)

本文转自桂素伟51CTO博客,原文链接: http://blog.51cto.com/axzxs/1358371,如需转载请自行联系原作者

atoi(),函数,将字符串转为整形数字

C 库函数 int atoi(const char *str) 把参数 str 所指向的字符串转换为一个整数&#xff08;类型为 int 型&#xff09;。 测试用例&#xff1a; #include <stdio.h> #include <stdlib.h> #include <string.h>int main() {int val;char str[20];strcpy(str, …