В основном я смотрю на 2 разные ситуации:
Вызовы методов в одном классе:
public class MyClass
{
public Bar GetDefaultBar(Foo foo)
{
Contract.Requires(foo != null);
return GetSpecificBar(foo, String.Empty);
}
public Bar GetSpecificBar(Foo foo, string name)
{
Contract.Requires(foo != null);
Contract.Requires(name != null);
...
}
}
Вызовы методов в разных классах:
public class MyClass
{
private MyBarProvider { get; set; }
public Bar GetDefaultBar(Foo foo)
{
Contract.Requires(foo != null);
return BarProvider.GetSpecificBar(foo, String.Empty);
}
//Object-Invariant ensures that MyBarProvider is never null...
}
public class MyBarProvider
{
public Bar GetSpecificBar(Foo foo, string name)
{
Contract.Requires(foo != null);
Contract.Requires(name != null);
...
}
}
Мне интересно, нужно ли иметь дубликаты контрактов для любой из этих ситуаций? Я предполагаю, что может быть способ избежать этого в первом примере (все в пределах одного класса), но не во втором примере (разные классы). Кроме того, я должен избегать дублирования или это должно быть там?