2009-09-07 82 views
1

首先我想說清楚,我不是在尋找「我的技術比你的更好」類型的帖子;這是一個真實的案例,我一直在面對這個決定。考慮到這一點,讓我解釋一下:Web窗體/ MVC到Windows窗體程序員

我們有一個WinForms應用程序。它開始於早期的.NET 1.0,但第一個發佈版本使用.NET 1.1。有層(如BusinessLayer.dll,Datalayer.dll,Framework.DLL等),但在此應用程序的「長」開發週期中的某個時間點,「表示層」(Win Forms)感染了一些代碼,因此「代碼與代碼背後的代碼之間的分離」是某種神話。 糟糕的做法或其他,事實是,應用程序在那裏,它的工作原理。

多年過去了,我們有了.NET 2.0,我們慢慢遷移,大部分工作,不得不在這裏和那裏改變一些電話。最後的版本做了同樣的事情,但對於.NET 3.5sp1。我們需要某種Web服務,並決定使用WCF。它工作正常。儘管所有這些.NET升級,但大部分應用程序的代碼庫仍然是5年前的搖滾樂。我們對我們的數據對象使用Gentle.NET(現在是老的和無人維護的)(這是5年前的祝福!)。

因爲我們使用完全gdi +自定義控件的90%,所以我們的表示層winforms「很好看」。 (只要有可能,無需破解WinAPi)。該應用程序是基於觸摸的(即:它使用墨水,但不依賴於此),但按鈕,標籤等等,一切都是「設計」用於觸覺設備。 (TabletPC或觸摸屏)。當然有些用戶使用鍵盤/鼠標。我們正考慮重寫應用程序,但使用Web技術的可能性,考慮到所有這些,以及所有這些web2.0和互聯網fuzz(加上Jeff的帖子;))。 這個想法顯然爲我們的客戶帶來了更多的可用性(他們可以隨時隨地使用系統)以及更少的維護(我們可以升級,並且可以立即升級),等等。互聯網vs WinApp thingy。

問題是,鑑於這是醫療保健行業,並非所有的客戶都願意將他們的數據庫「移動」到我們的服務器,這是可以接受的,並且會迫使我們安裝一個網絡服務器/數據庫服務器在他們自己的服務器上,所以他們有自己的副本不是一個大問題(除非我們需要手動更新,但這不是問題,因爲我們已經更新了win32應用程序5年了!)。

現在回到主要的「問題」。

這個團隊很少有Asp.NET的經驗,我們在ASP 2.0(1999/2000)中做了很多程序,但那是HTML + VBScript + CSS的意大利麪,所以我認爲它不重要。經歷了所有這些經歷(互聯網泡沫!)後,我們回到了VB6,然後是C#.NET 1x,並且您知道故事的其餘部分。我們是WinForms的C#開發小組。我們在最後的.NET 3.5中獲得了一些Linq To SQL Experience,我們很喜歡它。我們覺得這非常自然,非常「如果我們五年前會這樣......」就像。因爲所有這些,重寫應用程序並不是一個「簡單的任務」(即使我們想在已知的C#.NET中執行它),也需要時間和計劃,但是我們可以糾正幾十個錯誤並且在應用程序方面擁有5年的經驗,我們現在可以說我們對客戶如何使用該軟件有更好的瞭解,以及我們在設計當前應用程序時創建了什麼限制(我們自己)。 應用程序和業務工作方式的所有「知識」可用於在設計,代碼和可用性方面產生更好的應用程序。記住在.NET 1.1中我們甚至沒有泛型!;)(你會看到很多ArrayList掛在這裏)。作爲補充說明,我們使用Crystal Reports(和往常一樣,我們討厭它)。我們不認爲墨水控制也是「必須的」。儘管我們知道HTML不是WinForms(因此有些東西不能被複制),但HTML/CSS可以被塑造成我們想要的樣子。

您是否認爲在MVC(或WebForms)中計劃這太瘋狂了? 我喜歡MVC(ruby on rails like)這個想法(我從未在本書的基礎知識之外對ruby進行過編程),所以我們團隊中沒有人是專家,但我們總是可以學習和閱讀。它不應該是「火箭科學」,它必須嗎?

我知道這整個問題可能有點主觀,但你會用新的ASP/MVC/XXX Web應用程序替換老化的Winforms應用程序嗎?你有經驗或已經嘗試過(並且成功或失敗)?

任何洞察力,幫助使用更好地決定做什麼,將不勝感激。

在此先感謝!

UPDATE:感謝所有迴應,我們會評估這是否是一個好的舉措,它肯定是一個工作,但恐怕桌面應用程序正在變老(使用舊網1.1 hacks),而且它已經或多或少地在Vista和W7中沒有問題的工作,恐怕未來的更新可能會打破它。另外,應用程序中的許多「或多或少的核心」部分都暴露了一些設計錯誤的想法,我們不得不在這裏和那裏進行攻擊來完成某些任務。缺乏經驗的部分,部分缺乏關於業務如何運作的100%知識(以及客戶不確定他們想要什麼)。 新的應用程序(以任何形式)將允許我們創建一個更好的基礎,同時保留所有的用戶知識。但是,這是工作的一部分:)所以我們會在這裏考慮所有這些選項。 正如你們中的一些人所提到的那樣,也許更細的客戶端和一些(ab)使用WCF在這裏或那裏可能會更合適。

再次感謝所有人!

回答

3

當您重新創建Web應用程序時,最好盡力重新使用桌面應用程序代碼。以下是原因:

  1. 網絡應用特別是asp.net使用不同的模型。對於初學者來說,http是無狀態的。每次瀏覽器與服務器對話時,都必須明確發送當前頁面上所有控件的當前內容。你不會在你的Windows應用程序中使用這樣的模型。

  2. 爲了減少網絡負載,您希望優化視圖狀態的大小以及您發出http請求的頻率。您現有的窗口應用程序再次沒有任何此類規定。

  3. 正在更新視圖。您可能有不同的事件處理程序,線程以及不在您的Windows應用程序中用於在不同情況下更新GUI的內容。所有這些都需要被替換。 Javascript是一個完全不同的動物。

  4. 安全。在使用瀏覽器時,您對本地磁盤的訪問受到很大限制,而您將在Windows應用程序中採用相同的設置。如果在Windows應用程序中有任何需要本地資源的代碼,那麼這對你來說將是一個麻煩點。

我想提出以下建議:

  • 驗證,如果當前的應用程序有任何本地磁盤的訪問需求(例如讀取到本地文件/寫等)。
  • 在編寫不同的http模塊或處理程序時,可以嘗試利用現有windows應用程序的一些後端/業務邏輯部分。
  • 請仔細考慮應用程序的哪些部分可以成爲Web服務。
+0

+1提到HTTP是無狀態的 – jao 2009-09-07 18:23:38

+0

由於這是第一個答案,它提供了很好的信息,我接受它,但所有其他人都表示讚賞。可悲的是StackOverflow只處理整數的答案,我們不能提供兩個很好的答案:S – 2009-09-09 10:12:35

2

聽起來應用程序需要大量的重構來清理它。如果你想移動到一個Web模型,並有最大限度的重用,你真的需要這樣做。在轉向Web模型之前,我認爲您需要了解是否可以在該模型中複製用戶界面。從客戶的角度來看,它是你獨一無二的賣點嗎?你希望像這樣的決定是用戶驅動的,而不是純粹的技術決策。

聽起來好像您的應用程序是厚客戶端應用程序的完美候選人,而不是最低公分母web模型。

有些事情要考慮:

  • 如何將Web界面衝擊平板互動?
  • 什麼新客戶將有一個網絡版帶給你?
  • 現有客戶是否會放棄您的產品?
  • 您是否有權使用諮詢顧問或具有合適技能的外部資源來指導您使用網絡技術?如果你不這樣做,你可以依靠StackOverflow或其他Web資源來提供幫助。你需要一些良好的指導和指導。
  • 如果你開始這項工作會發生什麼,它會比預期花費更多時間?你知道這個應用程序,但聽起來並不像你所瞭解的那樣。過去的經驗表明,像這樣的大規模重寫可能會在災難中結束(從一開始聽起來就不那麼困難)
  • 您可以在基於Web的版本中編寫新功能嗎?
  • 您是否可以遷移到ClickOnce部署以使應用程序更易於部署給客戶。網絡的好處之一是更容易(零)部署。你能接近嗎?
  • 遷移到WPF並創建一個瀏覽器應用程序會更容易嗎?
  • Silverlight或Flex可能是創建豐富體驗的更好選擇,對於WinForms開發人員來說可能更易於使用。這有可能嗎?
+0

偉大的觀點布賴恩,將考慮到他們。謝謝。 – 2009-09-09 10:13:39

0

它看起來像你的應用程序。是最適合作爲桌面應用程序的應用程序之一。儘管你希望你的用戶能夠訪問你的應用程序。使用瀏覽器。

我會建議儘可能地重構,以便GUI變得更乾淨並且沒有「代碼」。 完成此操作後,開始開發一個asp.net mvc應用程序,但保留桌面應用程序。你應該能夠使用除UI層以外的所有層,使其更容易/更快/ ...現在mvc存在,我會說webforms更多的是讓非web開發人員做web。但你知道網絡,有點,你想要控制,所以mvc是要走的路。