更多地了解代码合约,它们似乎是我想在我的项目中使用的东西。
鉴于我构建 Web 服务层(从 MVC 控制器访问的服务层的抽象)的方式,我发现自己想知道为什么不能为接口实现的各种排列指定不同的合同。
具体来说,我对在给定通用接口方法的情况下只能以 1-1 方式指定合同的原因感兴趣。
这是我的代码结构的一个示例,我的目标是确定我想如何使用代码合同。我相信有更多经验的人能够将我推向正确的方向。
我正在使用 CQRS 风格的方法,例如:
public interface IQuery<in TInput input,out TOutput output>
{
TOutput Invoke(TInput request)
}
public interface IGetSomeUnicornsFromAMagicalLand :
IQuery<int, IEnumerable<Unicorn>>{}
// Implementation
public class GetSomeUnicornsFromMagicLand : IGetSomeUnicornsFromAMagicalLand
{
public IEnumerable<Unicorn> Invoke(int numberOfUnicornsToReturn)
{
// Here I'd like to specify some preconditions on the input,
// specific to type int
return _wizardry
.GetMagicCreature<Unicorn>(numberOfUnicornsToReturn)
.DoMagicalConversionToEnumerable()
}
}
鉴于这种情况,希望在实现级别而不是在设计用于在接口上应用合同的抽象类(作为通用机制)中指定合同似乎是合理的。
- 无法做到这一点的一些原因是什么?
- 还有其他方法可以解决这个问题吗?
- 如果我想使用代码合同,这不是一个好的结构吗?