首先我想說清楚,我不是在尋找「我的技術比你的更好」類型的帖子;這是一個真實的案例,我一直在面對這個決定。考慮到這一點,讓我解釋一下: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在這裏或那裏可能會更合適。
再次感謝所有人!
+1提到HTTP是無狀態的 – jao 2009-09-07 18:23:38
由於這是第一個答案,它提供了很好的信息,我接受它,但所有其他人都表示讚賞。可悲的是StackOverflow只處理整數的答案,我們不能提供兩個很好的答案:S – 2009-09-09 10:12:35