2008-11-03 20 views
1

我有一個Web應用程序數據庫3層服務器設置。 Web從應用程序請求數據,應用程序從數據庫獲取數據,然後處理並將其返回到Web以供顯示。標準。將對象從應用服務器序列化到網絡服務器的方法沒有代碼複製

當前,我從應用程序到網站序列化的所有數據都被放入自定義數據結構中,然後網絡端解析顯示數據結構。換句話說,假設我有一個要檢索併發送到Web的訂單。我不會序列化整個對象,而是在應用程序服務器上使用適當的數據元素構建數組,然後將該數組序列化到Web服務器。

現在,我正在考慮將整個訂單對象序列化到Web服務器。

什麼是你們發現的序列化對象的最佳方法,同時保持appserver和web服務器代碼的分離?我不希望我的web服務器有任何訪問數據庫的代碼,但我希望他們儘可能重用封裝我的訂單和其他數據的類。

爲了進一步優化我的問題(感謝Glenn的回覆),我不希望我的web服務器有任何周圍的業務邏輯說訂單類,只有應用服務器需要知道。這些對象已經在數據庫和/從Web服務器中使用單獨的序列化。

使用順序例如,在應用程序服務器中,順序應該是能夠取消:即

$命令 - >取消();

但在網絡服務器上甚至找不到該方法。它不應該直接代理回(直接)到appserver命令的cancel方法,因爲用戶操作請求應該流經應用程序的授權和權限檢查層。

那麼如何在我的web服務器上獲得一個訂單對象,該對象有一些(但不是全部)我的應用程序服務器上的對象的方法和屬性,幾乎沒有代碼重複。我一直在想的一件事是創建一個有限的屬性和方法的基類。它會使用一個內部類來保存它的屬性,並且我會要求所有數據訪問傳入和傳出getter和setter。這些反過來會在內部類中調用getter和setter。

然後,Web和應用程序服務器可以獨立擴展基類,並使用自定義內部類來保存屬性。然後在應用程序方面,內部類可以是一個ORM類擴展,可以將數據保存到數據庫中,而在Web端,內部類可以是一個簡單的屬性持有者類。

但是,整個內部類的東西似乎有點笨重,所以我仍然在尋找更好的解決方案。

回答

3
  • 因子出格式特定 序列化代碼到使用Adapter pattern單獨 類。您的問題域 類成爲後臺商店 中性。
  • 在應用程序層上使用關係數據庫特定的適配器類來對數據層進行序列化。
  • 在Web層上使用HTML特定的適配器類來將對象序列化到網頁瀏覽器或從網頁瀏覽器序列化對象。
  • 使用Web和應用程序層上的XML(或任何您認爲最合適的有線協議友好格式)特定的適配器類來對Web層和應用程序層之間的對象進行序列化。
  • 如果您足夠聰明,可以弄清楚如何使這些適配器類具有足夠通用性,從而不需要每個問題域類的不同套適配器類,就可以獲得額外的積分。
1

如果我正確理解你的問題,你想要序列化你的對象的數據,但是當它們重新水合時,它們應該是這樣的不同類型的對象(具有有限和/或不同的功能) ?

你可以用不同的方式做到這一點,這取決於你喜歡的協議。例如,你可以使用SOAP。然後,您應該將這些對象合併到客戶端的另一個類中,而不是在服務器端。你也可以使用PHP的原生serialization,或者a)在客戶端有不同的代碼庫(可能會令人困惑)或者b)模擬一下序列化的字符串(例如替換類名)。 A crude example可以在PHP手冊的註釋中找到。

+0

yes,例如,將appserver命令對象強制轉換爲其父類(稱爲Order_Base),然後在Web服務器端重新水化爲Order_Base,然後將其傳遞給Webserver端的子類構造函數以構造子類。儘管這有點笨拙.. – Zak 2008-11-03 21:15:57

相關問題