2011-09-20 70 views
1

我正在設計一組通用接口以闡明某些報告的構造。Fluent接口:避免泛型類型的過多參數

要做到這一點,我使用泛型,我要好好的不同流利階層之間在三個通用參數。有時我必須通過其中的四個,但這一切都是由框架完成的,背後的想法是,如果有足夠的注意力,就可以擁有一個完整的界面,而不必輸入任何泛型。

一個例子是

 t1.Schedule.ForSession(Session). 
      WithName("TestName"). 
      Map. 
      Args.FromResultsOfTask(t2).UsingDefaultMappings(). 
      And. 
      WaitOnCompletionOfTask(t4); 

運行的FxCop產生無盡的一套complaintsof此類型:

Error, Certainty 85, for AvoidExcessiveParametersOnGenericTypes 

我使用泛型創建「類型安全」(也許鍵入知道更正確的)映射可以定義的接口,如

... 
Map.Args.From(myObject). 
    Mapping(x=>x.MyProperty).To(y=>y.ArgsProperty). 
... 

什麼策略c我是否採用減少泛型的使用並仍然實現編譯安全的自定義映射?

有沒有人成功地使用仿製藥(並可以指向我一個很好的一套例子),以實現一個流暢的界面呢?

+0

什麼是醜陋的API。 – CodesInChaos

+0

@CodeInChaos也許吧。但它有一個目的。 – mhttk

+0

Microsoft現在將此代碼分析警告記錄爲:[CA1005:避免泛型類型上的過多參數](https://docs.microsoft.com/en-us/visualstudio/code-quality/ca1005-avoid-excessive-parameters-on -generic類型) – DavidRR

回答

5

這聽起來像你應該爲你的代碼壓制FXCop警告。如果自然有三個泛型類型參數,那麼這就是生命。仔細記錄下來,IMO應該沒問題。

工具一樣的FxCop在那裏是有幫助的,而不是成爲你的代碼的最終裁決。