.NET에서 인수와 가치의 사전 조건 및 조건을 주장하는 가장 좋은 방법?

StackOverflow https://stackoverflow.com/questions/155422

  •  03-07-2019
  •  | 
  •  

문제

나는 최근에 계약에 의한 디자인에 대해 생각해 왔으며 사람들이 .NET에서 컨디셔닝 전 및 조건의 값을 주장하는 가장 좋은 방법이 무엇인지 궁금해하고 있었습니까? 즉, 인수 값을 메소드에 검증합니다.

어떤 사람들은 Debug.Assert를 권장하는 반면 다른 사람들은 IF 문을 사용하고 예외를 던지는 것에 대해 이야기합니다. 각각의 장단점은 무엇입니까?

추천 할 수있는 프레임 워크는 무엇입니까?

도움이 되었습니까?

해결책

.NET 4.0이 배송되면 결국 코드 계약을 사용할 것입니다. 그러나 현재 생산 코드에서 우리는 "가드"클래스와 함께 공통적 인 방법을 생성하는 방법과 함께 큰 성공을 거두었습니다.

자세한 내용은 참조하십시오 이것에 대한 내 게시물.

다른 팁

또 다른 옵션입니다 투기#.

사양#은 객체 지향 언어 C#의 확장입니다. 유형 시스템을 확장하여 널 비 유형과 확인 된 예외를 포함하도록 유형 시스템을 확장합니다. 객체 불변성뿐만 아니라 전 및 사후 조건 형태의 방법 계약을 제공합니다.

Asserts보다 예외를 선호합니다. 그렇지 않으면 그렇지 않은 경우 고칠 수 있도록 알고 싶습니다. 디버그 모드에서 얻는 적용 범위는 실제 사용 또는 적용 범위가 거의 없기 때문입니다. Debug.Assert를 사용하면 충분하지 않습니다.

Asserts를 사용한다는 것은 릴리스 코드에 Bloat를 추가하지는 않지만 디버그 빌드에서 잡을 때 이러한 계약이 언제, 왜 파손되는지 알 수 있음을 의미합니다.

예외를 사용하여 계약이 발생할 때마다 계약이 파괴되거나 디버그 또는 릴리스되지만 릴리스 빌드에 더 많은 수표 및 코드가 포함되어 있음을 의미합니다.

접근 방식 사이에 가서 트레이스를 사용하여 사전 및 사후 조건을 어떤 종류의 애플리케이션 로그로 추적하여 문제를 디버그하는 데 사용할 수 있습니다. 그러나 사용자가 발생하는 문제를 배우기 위해 이러한 로그를 수확하는 방법이 필요합니다. 이것을 예외로 빗질 할 가능성도 있으므로 더 심각한 문제에 대한 예외를 얻을 수 있습니다.

그래도 내가 보는 방식은 계약이 시행 할 가치가 있다면 그것이 깨질 때 예외를 던질 가치가 있다는 것입니다. 나는 그것이 의견과 대상 응용 프로그램에 약간 달려 있다고 생각합니다. 예외를 던지면 예외를 제외 할 때 충돌 보고서를 제공하는 몇 가지 형태의 사고보고 시스템을 원할 것입니다.

유창한 프레임 워크를 볼 수 있습니다. http://conditions.codeplex.com/오픈 소스와 무료.

SPEC#은 C#의 슈퍼 세트 인 방법입니다. 이제 당신은 "코드 계약", 이것은 사양#의 언어 공유 버전이므로 이제 vb.net에서 코드 계약을 체결 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top