[英]Using VCL for the web (intraweb) as a trick for adding web interface to a legacy non-tiered (2 tiers) Delphi win32 application does make sense?
我的團隊正在維護一個巨大的Client Server win32 Delphi應用程序。 它是一個客戶端/服務器應用程序(胖客戶端),它使用DevArt(SDAC)組件連接到SQL Server。
業務邏輯經常被“陷阱”在Component的事件處理程序中,無論如何,通過一定程度的重構,可以將業務邏輯移動到公共單元中(這項工作的很大一部分已經在重構期間完成了......維護遺留應用程序的人別寫的非常令人沮喪,但這是一項非常普遍的工作)。
現在有一個Web界面的請求,當然我有幾個選項,在這個問題中我想關注VCL for web(intraweb)選項。
我們的想法是為客戶端/服務器應用程序和Web應用程序使用公共代碼(相同的pas文件)。 我聽說很多人將遺留應用程序從delphi遷移到intraweb,但在這里我也試圖保留Thick客戶端。
這個想法是使用通用代碼,可能會用一些編譯器指令來編寫特定的代碼:
{$IFDEF CLIENTSERVER}
{here goes the thick client specific code}
{$ELSE}
{here goes the Intraweb specific code}
{$ENDIF}
然后另一個問題是“遷移計划”,假設我有300個功能,在第一個版本中,我將只在Web應用程序中提供50個。 如何跟蹤它? 我在想(ab)使用Delphi接口來處理這個問題。 例如,對於用戶身份驗證,我可以在過程中移動所有相關代碼並聲明如下界面:
type
IUserAuthentication= interface['{0D57624C-CDDE-458B-A36C-436AE465B477}']
procedure UserAuthentication;
end;
通過這種方式,當我在兩個應用程序(胖客戶端和Intraweb)中實現IUserAuthentication接口時,我知道該功能已經“移植”到Web上。 無論如何,我不知道這種方法是否有意義。 我制作了一個原型來模擬整個過程。 它適用於“Hello world”應用程序,但我想知道它是否對大型應用程序有意義,或者這種接口的想法只會適得其反並且會適得其反。
我的問題是:這種方法有意義嗎? (接口的想法只是一個額外的想法,它不像上面描述的通用代碼部分那么重要)它是一個可行的選擇嗎?
據我所知,這取決於很多類型的應用程序,無論如何我是CRM / Accounting域中的通用,並且單個安裝上的並發用戶數通常少於20,峰值為50。
額外評論(更新):我問這個問題是因為我沒有n層應用程序,所以我認為Intraweb是擁有一個與胖客戶端有共同代碼的Web應用程序的唯一選擇。 在我的特定情況下,從Delphi代碼開發Web服務是沒有意義的,所以我可以選擇使用ASP.NET編寫Web界面(復制業務邏輯),但在這種情況下我無法利用公共代碼。簡單的方法。 是的我可以使用dll,但我的代碼不適合。
你必須要記住的最重要的事情是:
這意味着您的業務邏輯不僅必須重構為公共單元,業務邏輯的實例必須能夠多次駐留在內存中,而不是干擾。
這從與數據庫對話的業務邏輯開始:您必須能夠同時擁有多個數據庫連接(實際上,數據庫連接池最有效)。
根據我的經驗,當您可以將業務邏輯重構為數據模塊時,您有一個很好的起點來支持應用程序的Intraweb和胖客戶端版本。
你不應該忘記用戶界面:
然后,最重要的是,您必須應對HTTP協議的無狀態特性。 為了克服這個問題,你需要會議。 Intraweb將負責會話的大部分內容。
但你需要問自己這樣的問題:
這只是一個開始,所以當你需要更多信息時,請使用知道。
如果它非常適合您的應用,您可以隨時直接與我聯系:只是谷歌我。
--jeroen
我認為如果將應用程序移動到n層將是一個更好的解決方案,那么桌面和Web應用程序將更容易使用它。
通過將業務邏輯與表示分離,您已經完成了第一部分,您可以使用與Delphi捆綁在一起的RemObject SDK或DataSnap。
之后,您將擁有工作桌面應用程序,並且您可以使用Intrawebm Asp.net或Web部件的任何內容,這樣您就不必再為Web部件復制業務邏輯。
通常將桌面應用程序轉換為Web並不容易,因為它們在不同的環境中工作,並且您需要根據其性質構建每個應用程序。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.