2010-06-30 45 views
1

我們即將推出我們的第一個較大的WCF項目,並且我們對如何正確分層應用程序以及所有模式所在的位置存在一些擔憂。有關WCF中常見模式的問題,在分層架構中

這些服務將主要由Intranet上的應用程序使用,其次由客戶通過Internet訪問。

我們的想法是層應用這種方式,通過DDD啓發和微軟西班牙的N Layer App

  • 基礎設施層
    • 使用EF4(POCO)和存儲庫模式
  • 域層
    • 到目前爲止,我們有幾個域名服務這裏
  • 應用層
    • 這裏還沒有
  • 分佈式服務層(WCF)
    • 這是問題開始出現的地方。
  • 表示層

現在我們已經閱讀大量的材料,作爲一個例子,福勒提到了遠程Facade模式和數據傳輸在他的企業架構的書模式對象的分佈格局。

如果我正確理解了門面和WCF,我的遠程門面將成爲WCF中的服務契約。但是,福勒擁有許多自己的類(如Album Service),但在WCF中,我只有一個服務合同和一個類(Microsoft在它的N層應用程序中將它稱爲IMainModuleService)。我們當然可以使用部分類來「模擬」多個外牆,但是如果您瞭解,我不會覺得這是「順便」。但是,這是在WCF中完成的方式,還是完全忽略了遠程門面模式?

福勒建議您發送DTO的電匯而不是商業實體,這對我來說聽起來合理。但是我見過的很多樣本都沒有這樣做。你在WCF做這個嗎?
假設你在WCF中使用DTO,這些將是我們的數據合同,對吧?實現DTO的時候,Fowler舉了一個使用AlbumAsembler類(一個DTO?)的Album Service(外觀)的例子來組裝使用商業實體的DTO。我想這是使用來自應用程序/域的服務完成的?
但是這些DTO的組裝在哪裏?這是在應用程序層完成的,在該層中還會發生一些驗證,或者此責任在哪裏?我真的需要一些指導和最佳實踐,我希望你能給我。

這些是我們目前的一些問題,我們希望您能指導我們完成。對整體架構的任何評論也將不勝感激。另一個我們尚未考慮的問題是如何在企業應用程序中處理WCF中的安全性(使用WIF?)的最佳實踐。如果您對此事有任何意見,請分享。

回答

1

然而,福勒有很多,這些門面的每一個自己的類(如相冊服務),但在WCF我只有一個服務合同,一類

可以定義多個服務合同,所有這些都定義了自己的服務端點。一般來說,一個服務合同應該提供一套明確定義的操作,就像一個班級理論上有一套有限的公共方法。

福勒建議您發送DTO的電匯而不是商業實體,這對我來說聽起來很合理。但是我見過的很多樣本都沒有這樣做。你在WCF做這個嗎? 假設你在WCF中使用DTO,這些將是我們的數據合同,對吧?

您可以使用Datacontract和Datamember屬性修飾您的業務實體,這樣也可以使它們成爲DTO。這是您的業務實體和數據合同之間的耦合問題。如果你想要低耦合,你可以定義一個專用的DTO,並從商業實體中複製它的數據倉庫值。

+0

謝謝。但是有多個終端最佳實踐?我還沒有看到一個具有多個端點的示例應用程序。如果端點處於「課堂級別」(就他們必須提供的操作而言),我將擁有許多端點,每個端點都具有不同的地址和綁定。這對我來說似乎是錯誤的? 您是否知道如何創建這些DTO的最佳做法?如果您有幾個與您的業務實體完全相同的DTO,該怎麼辦?你做錯了嗎? – 2010-07-04 09:17:50

+0

DTOs /合同是否有自己的組裝?或者他們與服務生活在同一個集會中?你怎麼看? – 2010-07-04 11:23:42

+0

在我開始定義一些合同之前,我不會過分分析它。您可以先將所有內容放在一個ServiceContract中,然後重構它,例如,您希望針對部分服務使用不同的訪問限制。同樣,您可以使用datacontract屬性修飾實體,或使用通過從實體複製屬性創建的DTO。如果您想自動創建DTO,您可以使用像[AutoMapper](http://automapper.codeplex.com/)或[ValueInjecter](http://valueinjecter.codeplex.com/)的對象映射器 – Ozan 2010-07-04 12:17:17