2011-02-15 3 views
8

나는 코드 계약을 사용하기 시작했으며 방법의 '용기'를 즉각적으로 파악하는 것을 어렵게한다는 것을 발견했습니다..NET 4.0에서 코드 계약을 어떻게 사용합니까? 코드가 어수선하게 보이지 않습니까?

이 (매우 간단) 예를 보자 이제 나는 그들이 숨어 할 수 있도록 영역에서 계약을 넣어 유혹하고있어

public static void UserAddNew(string domain, string username, string displayName) 
{ 
    Contract.Assert(!string.IsNullOrWhiteSpace(domain)); 
    Contract.Assert(!string.IsNullOrWhiteSpace(username)); 
    Contract.Assert(!string.IsNullOrWhiteSpace(displayName)); 

    LinqDal.User.UserAddNew(domain, username, displayName); 
} 

,하지만 그때 난 것을 걱정 그 방법을 한눈에 볼 수있는 좋은 이점을 잃어 버리고 그것이 기대하는 것을 볼 수 있습니다.

계약을 '깔끔하게'유지하려면 어떻게합니까? 아니면 너무 까다 롭지 않은가?

+0

가능한 중복 ": 코드를 어수선하게 보이지 않으면 서 응용 프로그램에 새로운 기능을 어떻게 추가합니까?" –

+3

AFAICT, 이것은 새로운 것이 아니며 코드 계약에 고유하지 않습니다.이 방법은 CC 이전에 매개 변수를 확인하는 것이 었습니다. 그렇지 않습니까? 나는 약간의 공백으로부터 이것에 대한 해결책을 가지고 있지 않다 ... – Mormegil

+0

나는 Mormegil에 동의한다. CC가 나오기 전에 "if (condition) throw new argumentexception"이라고 써야합니다. – koenmetsu

답변

6

ContractClass 및 ContractClassFor 속성을 살펴보십시오. 이를 통해 별도의 어셈블리에 코드 계약을 포함한 클래스를 작성할 수 있습니다. 이 코드를 복잡하게하지 않고, 당신이 dev에 작업에 사용할 수있는 계약을 할 수 있으며 또한 라이브 코드와 계약을 배포 할 필요가 없습니다 의미

Contract Class Attribute

Contract Class For Attribute

+1

참이지만,이 예제에서 사용한 정적 메서드에서는 작동하지 않습니다. – koenmetsu

+1

또한 계약 배포는 코드 계약 속성 창에서 사용하는 설정에 따라 다릅니다. 올바른 설정없이 계약을 배포하지 않으면 문제가 발생합니다. – koenmetsu

+0

필자는 개발자가이 기능을 사용하는 방법에 대한 설명서를 읽을 것이라고 가정합니다. :) –

관련 문제