2008-10-07 111 views
2

我已經構建了一個複雜的查詢機制,我想提供一個工廠以幫助具有常見查詢模式的人員。我的方法都是通過WCF作爲SOAP Web服務公開的。什麼是確保我的工廠易於在所有可能希望使用我的服務的客戶端使用的最佳方式(因爲我不指望我的所有客戶都使用.net)?使用WCF時創建工廠方法的最佳方法是什麼?

更新:我想編寫一些工廠方法來協助針對我寫的「查詢系統」的常見模式。我目前有多個OperationContracts從我的服務中暴露出來,並且也暴露了多個DataContracts。我對構建Factory的某些東西的最佳方式有一個心理障礙,即返回我的自定義查詢對象以支持我認爲他們需要的常見模式。

一個具體的例子就是一個方法根據一個搜索請求對象返回命中我的數據庫,該對象有多個匹配概念的多個組,我的代碼將所有這些轉換爲LINQ表達式樹,搜索請求對象將限制結果爲美國原產地的來源,這實際上是一組大約20個匹配項,並且可以移位,所以我不想顯示硬編碼的代碼示例,而是希望僅返回組對象根據有關項目來源的數據,然後可以在搜索請求對象中使用這些數據。這對於像「GroupFactory.CreateGroupOfSomethingOrOther」這樣的工廠方法來說聽起來很理想,但是對於我來說這是最好的地方呢?或者,我只是想讓它變得更加複雜,而不是它本應該是的?

回答

1

除非您以各自的母語爲您的每位消費者提供圖書館,否則您無法真正提供工廠。 而不是返回分組對象的工廠,請考慮過濾添加一些需要較少粒度配置的過濾對象。

例如,而不是:

GetMatches(new GetMatchRequest() { 
     Filter = new FilterByState() { 
      "AZ", "CA", "OH", ... }}); 

考慮:

GetMatches(new GetMatchRequest() { Filter = new FilterByCountry("USA") }); 

所有常用的過濾器從類似FilterBase獲得或實現IFilter。在服務器端,調用類似FilterBase.ConstructQueryObject()來返回更細粒度的對象。

相關問題