客戶端是選擇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.pswp.cn/news/256960.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/256960.shtml
英文地址,請注明出處:http://en.pswp.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, …