MS 코드 계약을 사용 중이며 인터페이스 상속 및 ContractClassFor 특성을 사용하여 문제가 발생했습니다.코드 계약 : 상속 된 인터페이스를 다루는 방법?
을 감안할 때 이러한 인터페이스 및 계약 클래스 :
[ContractClass(typeof(IOneContract))]
interface IOne { }
[ContractClass(typeof(ITwoContract))]
interface ITwo : IOne { }
[ContractClassFor(typeof(IOne))]
abstract class IOneContract : IOne { }
[ContractClassFor(typeof(ITwo))]
abstract class ITwoContract : IOneContract, ITwo { }
는 이제 IONE 및 ITwo 상당한 인터페이스가 있다고 가정 해 봅시다. 따라서 IOneContract는 필요한 검사를 위해 상당한 양의 코드를 포함하게됩니다.
IOne 인터페이스에 대한 ITwoContract의 모든 것을 복제하고 싶지 않습니다. ITwo 인터페이스에 대한 새로운 계약 만 추가하려고합니다. 하나의 계약 클래스를 다른 클래스에서 상속받는 것은 해당 코드를 재사용 할 수있는 가능성이있는 것으로 보입니다. 그러나 다음과 같은 오류 메시지가 나타납니다.
코드 계약의 제한 사항입니까? 아니면 잘못 했습니까? 우리는 프로젝트에서 많은 인터페이스 상속을 가지고 있으며,이 문제를 해결하는 방법을 모르는 경우 코드 계약의 거래 차단기처럼 느껴집니다.
아! "상속 된 모든 IOne 메서드를 추상으로 선언 할 수 있습니다."비트가 내가 놓친 핵심 부분이었습니다. 고맙습니다. – scobi
문제는 여전히 추상 계약 클래스 ITwoContract에서 모든 IOne 메서드를 지정해야한다는 것입니다. IOne이 50 개의 메소드를 가지고 있다면, 나는 그 인터페이스를 상속받은 모든 인터페이스에 대해 반복해야합니다. 이것은 지루하고 지루하고, IOne을 어렵게 만듭니다. – Rob
50 개의 메소드가있는 인터페이스를 사용하는 경우 단일 책임 원칙을 위반하게되므로 지루하고 단단한 인터페이스에 관련된 모든 변경 사항을 발견하게 될 것입니다. –