コード コントラクトについて詳しく学ぶと、自分のプロジェクトで使用したいもののように思えます。
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()
}
}
このコンテキストを考えると、(一般化されたメカニズムとして) インターフェイスにコントラクトを適用するように設計された抽象クラスではなく、実装レベルでコントラクトを指定することが合理的であるように思われます。
- これができない理由にはどのようなものがありますか?
- これに対応する他のアプローチはありますか?
- コード契約を使用したい場合、これは良い構造ではありませんか?