2011-07-04 31 views
4

我目前正在開發一個Web服務,它應該公開大量的與之交互的方法。WCF:使用部分類拆分複雜的Web服務?

例如,客戶端可能能夠與Web服務交互以管理數據庫中的用戶或項目。

爲此,我創建了以下類:

  • 兩個數據合同:IUsersServiceContract和IProjectsServiceContract
  • 兩份服務合約的接口:IUsersServiceContract和IProjectsServiceContract

我的問題如下:

是否有意義創建兩個不同的Web服務,每個都有自己的端點,而不是創建一個實現兩個服務契約接口的大類?

請記住,實際上我會有更多的服務合同接口處理不同種類的數據。

據我所知,使用部分類(在多個文件中拆分)將允許我創建一個只有一個端點的大型Web服務。

這有一個缺點,就是處理多個文件中的一個大類拆分,即:如果開發人員「看不到全局」,則難以維護並更容易出錯。

另一種解決方案是實現一個服務合同接口的Web服務。從本質上講,如果我有X服務契約接口,我最終會得到帶有X端點的X Web服務。

您會選擇哪種解決方案?爲什麼?

感謝您的輸入!

回答

4

就我個人而言,我不會使用部分類來分割一個類;純粹的大小激勵tgis分裂表明這個類太大,需要重構。在我看來,部分類的主要目的是爲自動生成的代碼添加更改。

由於可以使用web.config中的命名行爲來共享服務和端點配置,所以拆分服務不應該太麻煩。但是這種分裂應該由功能分組來激勵。

不知道你服務的確切性質,聽起來好像兩種服務可能會自然分離;一個用於用戶相關操作,另一個用於面向項目的操作。

如果實現類增長超出您認爲合理的大小,我會考慮讓單獨的類(或最好是接口)處理每個方法的內部邏輯,並讓服務實現它自己是一個淺層的外觀,將其自己的方法參數委託給正確的logoc實例

+2

謝謝Faester,您的評論確認了我對部分課程的擔憂。我也很感謝你的意見,我會遵循你的指導方針。但是有一個問題,你說的「服務和端點可以使用web.config中的命名行爲來共享」是什麼意思? (我只是習慣WCF :))。我知道服務和端點可以使用行爲進行「配置」,但我不確定您分享服務和端點的含義......?你的意思是行爲本身可以共享嗎? –

+0

對不起,這是一個錯字。正如你建議我的意思是共享配置。 (大多數人不喜歡配置WCF爲什麼在任何地方重複使用都是一個好主意,Typo現在已經修復了。)我很高興學習你可以使用我的評論:) – faester

+0

非常好,謝謝! –

1

這裏要考慮的一件重要事情是,當你在談論n服務合同的數量時,是與實施每個服務合同相關的成本。這裏有一篇很好的博客文章,"Service Contracts Factoring and Design",雖然如果不是Juval Lowy發佈了這篇文章,那麼有人顯然會撕掉他(我指的是Juval的書 - 「編程WCF服務」第93頁)。