基本情况是一米,看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);
...
}
}
我不禁要问,是否有必要为这两种情况订立重复合同? 我猜测,在第一个例子(在同一类别之内)中,也许有办法避免这种情况,但在第二个例子中(不同类别)。 而且,我是否应当避免重复,或者是否应该这样做?