2011-01-19 161 views
0

在RIA應用程序,你應該把儘可能多的業務邏輯(閃存/ Silverlight的等)的RIA層的可能之外。這背後的原因是什麼?進入進表示層的任何邏輯得到執行速度更快的利益......業務邏輯不是在表示層

這是因爲RIA技術將很可能需要面對電梯向下走,你將不得不重新編寫所有的業務邏輯?

+0

是一款性能 - 安全 - 可維護性遊戲 – gustyaquino 2011-01-19 16:35:27

回答

5

我不知道我同意你的前提,是你「應該」把業務邏輯的客戶端之外。您應該將業務邏輯移到UI層之外,但在您點擊後端Web服務之前,通常仍有一些客戶端層。例如,一個典型的Silverlight應用程序基於MVVM模型,該模型規定了一個沒有業務邏輯的View,一個具有相當好的驗證和業務邏輯的ViewModel,以及一個剩下的模型。而這一切都在客戶端。

在另一方面,你真的需要一個商業邏輯層的服務器上也是如此。您不能依靠客戶端應用程序來過濾掉所有不良數據:有人可能正在運行老版本的客戶端,或者完全不同的客戶端,或者可能正試圖破解您的系統。

換句話說,理想情況下,你應該有你的業務邏輯,並在客戶端和服務器上執行驗證:在客戶端上,因爲你需要的響應,並在服務器上,因爲你需要的安全性。問題是如何得到這個,並沒有任何完美的答案。

Silverlight應用程序中常用的一種方法(我對Flash不太熟悉)是使用WCF RIA服務,它允許您在客戶端和服務器上執行的一個地方創建驗證。即使您沒有使用WCF RIA Services框架,您仍然可以通過鏈接到客戶端和Web服務上的驗證/業務邏輯類的源代碼獲得相同的效果 - 這是更多的工作,但仍然可能比編寫驗證兩次並保持手動同步更少。

+0

前提不是東西放在外部或內部也好,在業務內容層的發明簡單和絕對必要的理由 - 共享層之間algorihtms。 – 2013-09-26 09:36:52

0

所以,一個原因是可維護性。如果客戶端已經分佈到任何地方,那麼當簡單的業務規則發生變化時,您不需要重新安裝或重新下載。只需將更改部署到後端,您就完成了設置。

它也可以讓你做事情喜歡隱藏自己的防火牆後面的數據庫。如果您的所有業務邏輯都在前端,那麼您可能需要公開數據庫,以便可以在客戶端上執行業務邏輯。

但我擔心,「商業邏輯」是一個重載的術語。什麼是「商業邏輯」?正確的架構是最適合您的應用和需求的架構。

正如@Ken史密斯說,你當然應該避免在UI層的業務邏輯。這是爲了可測試性,可維護性,可設計性等。但這並不意味着所有事情都進入後端,特別是在具有重要UI規則的RIA應用程序中。在MVVM應用程序(Silverlight)或演示模型應用程序(Flex)中,您將UI BEHAVIOR放置在ViewModel或PresentationModel圖層中。然後,將模型中的任何級別的業務邏輯都合理化。這種業務邏輯可能只是一些驗證。它可能更多。這取決於你的架構。

1

業務邏輯是一個橫切關注點。

將你的用戶是進入的日期?如果是這樣,界面需要知道他們是給他們一個選擇器的日期,並防止無效輸入。甚至可能會限制條目的範圍。這是商業邏輯。你怎麼能保持它,並仍然有一個有意義的接口?

用戶是否會隨時進入美國州或省?如果是這樣,下拉列表將不得不填充,這意味着UI「知道」外鍵。

用戶可以看到但不能更改的字段嗎?爲什麼或者爲什麼不?這是商業邏輯。某些用戶可以根據特定條件做些什麼限制?這是商業邏輯。

這並不意味着UI知道全部業務邏輯,當然,許多數據移動操作與UI無關。

但最終的問題不是如何讓BL出了UI的,你不能做到這一點,問題是哪種BL的將在UI。這往往歸結爲類型,數值範圍,允許的操作等等。

因此,無論是用戶界面從低層獲取所有信息,還是在UI層中複製其中的一些信息。