簡體   English   中英

使用VCL作為Web(intraweb)作為向傳統非分層(2層)Delphi win32應用程序添加Web界面的技巧確實有意義嗎?

[英]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,但我的代碼不適合。

你必須要記住的最重要的事情是:

  • 您的胖客戶端.EXE進程一次由一個人使用(多個人將有多個.EXE實例)。
  • 您的intraweb .EXE進程將被許多人一次使用。 它們都共享相同的流程實例。

這意味着您的業務邏輯不僅必須重構為公共單元,業務邏輯的實例必須能夠多次駐留在內存中,而不是干擾。

這從與數據庫對話的業務邏輯開始:您必須能夠同時擁有多個數據庫連接(實際上,數據庫連接池最有效)。

根據我的經驗,當您可以將業務邏輯重構為數據模塊時,您有一個很好的起點來支持應用程序的Intraweb和胖客戶端版本。

你不應該忘記用戶界面:

  • 胖客戶端支持模態表單,並具有更豐富的UI
  • Web瀏覽器僅支持消息對話框(然后:那些非常有限),所有花哨的UI內容都需要大量的開發時間(例如,TMS有一些很好的Intraweb組件

然后,最重要的是,您必須應對HTTP協議的無狀態特性。 為了克服這個問題,你需要會議。 Intraweb將負責會話的大部分內容。
但你需要問自己這樣的問題:

  • 如果用戶閑置XX分鍾會發生什么?
  • 我可以在內存中存儲多少會話狀態? 如果它不適合怎么辦?
  • 如何處理不適合內存的會話狀態?

這只是一個開始,所以當你需要更多信息時,請使用知道。
如果它非常適合您的應用,您可以隨時直接與我聯系:只是谷歌我。

--jeroen

我認為如果將應用程序移動到n層將是一個更好的解決方案,那么桌面和Web應用程序將更容易使用它。

通過將業務邏輯與表示分離,您已經完成了第一部分,您可以使用與Delphi捆綁在一起的RemObject SDK或DataSnap。

之后,您將擁有工作桌面應用程序,並且您可以使用Intrawebm Asp.net或Web部件的任何內容,這樣您就不必再為Web部件復制業務邏輯。

通常將桌面應用程序轉換為Web並不容易,因為它們在不同的環境中工作,並且您需要根據其性質構建每個應用程序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM