2014-02-26 51 views
0

首先,我愛代碼契約,但我有點困惑與一個念頭:僅依賴於用作依賴關係的導出接口的契約是不是一個好主意?

我班MyClass使用的依賴被分配爲合同類的接口IDependencyinternal abstract class IDependencyContracts)聲明,我的班級在很大程度上依賴於這些合同。我沒有保證合同是強制執行由客戶端代碼提供的接口的自定義實現。
據我瞭解,我可以強制執行僅在我的程序集中的類的合同,但我沒有控制客戶端代碼程序集。

那麼我必須在代碼中使用Contract.Assert(),其中接口用於檢查返回的結果是否符合預期?

回答

2

你是對的。如果你的界面的消費者也使用合同,他們當然會感謝你。如果他們沒有使用合同,他們可能會認爲合適。

這就是爲什麼我會在這種情況下使用Contract.Assume(),即使Contract.Assert()可以被證明。爲了我自己的利益,我會使用假設來提醒別人可能會違反合同。