這是關於設計的一般問題。在業務層和表示層之間進行通信的最佳方式是什麼?我們目前有一個可以傳入業務層的對象,服務從對象讀取信息並將結果設置到對象中。當服務完成後,我們將有一個對象填充業務層的結果,然後UI可以根據對象的結果顯示。服務於業務層和表示層之間通信的對象
這是最好的方法嗎?還有什麼其他的方法?
這是關於設計的一般問題。在業務層和表示層之間進行通信的最佳方式是什麼?我們目前有一個可以傳入業務層的對象,服務從對象讀取信息並將結果設置到對象中。當服務完成後,我們將有一個對象填充業務層的結果,然後UI可以根據對象的結果顯示。服務於業務層和表示層之間通信的對象
這是最好的方法嗎?還有什麼其他的方法?
領域驅動設計書(在迅速版本是自由avaible here)可以給你洞察到這一點。
簡而言之,他們提出了以下方法:模型對象從模型層橫向到無縫地查看層(如果您在clinet/server上使用靜態類型化語言或不同語言,這可能會非常棘手,但它很微不足道動態的)。此外,服務只能用於執行不屬於模型對象本身的操作(或者當您的操作涉及大量模型對象時)。
此外,業務邏輯應放入模型層(實體,服務,值對象),以防止着名的anemic domain model反模式。
這是另一種方法。如果它適合你,這取決於團隊,編寫代碼的數量,你有多少測試報告,項目有多長時間,如果你的團隊敏捷或沒有,等等。領域驅動設計可以更快速地進行討論,如果您至少先略過它(如果您選擇進一步深入研究,從埃裏克埃文斯獲得原始書籍將有所幫助),那麼任何決定的風險都會小得多。
我們使用偵聽器模式,並在業務層中向事件層發送信息。
這取決於你的架構。
有些人在同一個exe或dll中構建它們的代碼,並遵循標準的n層架構。
其他人可能會分裂出來,以便他們的服務都是Web服務而不是標準類。這樣做的好處是可重用的業務邏輯安裝在物理基礎設施中的一個地方。因此,所有應用程序都適用單一更改。
作爲服務和雲計算的軟件正在成爲事物正在向前發展的平臺。亞馬遜彈性雲,微軟Azure和其他雲提供商都提供可能影響您對架構決策的衆多服務。
一個我將要使用的是
的Silverlight UI
WCF服務 - 業務邏輯在這裏
NHibernate的數據訪問
SQL Server數據庫
我們只有很將允許應用程序層通過接口進行交談,以便我們可以在Azure雲服務變得更多時進展ATURE。
域驅動設計對於關注應用程序體系結構的人來說絕對是一個出色的入門點。我遵循DDD一年以上,誠實地感覺自己是一個更好的開發者。 如果您是.net開發人員,我也可以推薦Jimmy Nilssons關於DDD和C#設計模式的書。 – Peter 2009-06-02 20:03:12