문제

내가 싫어 쓰기 코드는 소프트웨어 더욱 견고합니다.이것은 무언가 프레임워크가 있어야 한다!그래서,아무도 알고 코드를 향상""유틸리티를 고형화하는 코드?

면 나는 뭔가를 만들이 자신을,그것은 다음과 같이 작동합니다.을 때 당신이 컴파일하는 코드를 디버그 국기,그것은 것 자동 마술 추가"공고히"코드에 대한 각각의 방법:

워프 코드 try-캐치를 넣어 디버그.Assert(true)에 catch(도록 예외는 그들의 유래).

로그 각 방법의 입장,인쇄"ToString()"값의 인수,그래서 내가 추적할 수 있습니다.

체크인 각각의 인수를 위한 null 입니다.

사용하는"IsValid"프레임워크인 물체 및 자체 각각 인수 IsValid()은 객체의 방법의 선언은 그 기대는 진정한(예를 들어,난 경우 TableOfContentsEntry 기대하는 항상 예약하는 IsValid()및 지 페이지의 IsValid().

그래서,왜?

도움이 되었습니까?

해결책

로그인할 경우 메소드를 호출이 사용할 수 있습니 AOP 와 같은 프레임워크 PostSharp.같은 것들을 적용하는 방법 사전/사후 조건 최고의 것을 사용하여 달성 디자인-에 의해 계약 메커니즘은 다음과 같은 새로운 계약 코드 라이브러리 제공되는 것입니다.net4.0.그것은 확실히 이해되지 않을 확인에 대한 인수가 null 이 될 수 있는 유효한 값에 따라서는 방법입니다.주입하여 디버그.주장하는 코드로 문제가 될 수 있기 때문하고 싶지 않을 수도 있/을 처리할 수 있는 예외에서 원본 기능입니다.나는 생각한 것이 비현실적지 않으면 불가능성에 대한 일반 프레임워크는 이런 종류의 물건 이후 요구 사항과 다를 것이 너무 크게 프로젝트입니다.

편집:을 명확히 나의 코멘트를 추가하여 디버그션으로 방법-제가 읽기 당신의 제안을 변환하는 방법으로 몸은 무언가 이것을 좋아한다:

public void SomeMethod(args)
{
    try
    {
        //original method body
    }
    catch(Exception ex)
    {
        Debug.Assert(false);
        throw;
    }
}

이 문제는 주장을 나타내는 결코 거짓이 구성하는 방법은 절대로 버리지 않는 사실이 아닙니다.문제입니다 지금 하는 경우에는 방법에서는,던져 주장이 실패하는 경우에도 호출하는 방법은 예외를 처리합니다.에서 당신의 코멘트 그것은 당신이 뭔가를 다음과 같다:

public void SomeMethod(object arg)
{
    Debug.Assert(arg != null);
    if(arg == null) throw new ArgumentNullException("arg");

    //rest of method
}

이는 유용한 연습,그리고 나는 믿고 계약 코드 라이브러리 지원'기존'전제 조건을 검사(던지는 경우를 제외하고)그 자리에 정적 분석입니다.

다른 팁

내 책이 막히는 것을 보니 반갑습니다! 저에게 큰 문제는 코드 생성이 개발자의 코드를 "옆에"하는 것을 목표로해야한다고 생각합니다. 즉, 생성 된 코드는 개발자의 코드와 혼합되지 않습니다. 이 '고상화'코드를 부분 클래스로 추가 할 수있는 방법이 있는지 또는 클래스와 클래스를 부르는 클라이언트 사이에 설정할 대리로 추가 할 수있는 방법이 있는지 궁금합니다. 물론, 코드를 생성하고 개발자의 코드에 삽입 할 수는 있지만 개발자가 변경을하고 "철저한"코드를 재생할 때 도구가 이전을 삭제할 수 있도록 일종의 컨벤션을 만들고 싶을 것입니다. 최신 버전의 개발자 코드를 기반으로 새 코드를 코드하고 생성합니다.

나는 당신이 작업자 스레드에 무언가를 전달할 때 스택을 잃지 않는 것을 좋아합니다. 나는 이것 (c#)에 대한 해결 방법조차 모른다. 작업자 스레드가 생성 된 지점까지 상위 스레드의 스택을 아는 것이 좋을 것입니다.

일반적으로 나는 정말 유용한 것들이 많은 것을 언어로 내장해야하며 도서관이나 프레임 워크만으로는 깨끗하게 달성 할 수 없다고 생각합니다. 고등학교에서 그들은 기능에 대한 의견에 항상 사전/사후 조건으로 글을 쓰는 것을 기억하지만, 내가보고 싶은 것은 컴파일 시간에 가능한 경우 확인되는 사전/사후 조건을 작성하는 것입니다. 실행 시간. 편집자가 선택적으로 보여 주거나 숨길 수 있도록 어떤 방법으로 표시되어 실제 코드를 읽는 데 방해가되지 않습니다.

나는 그런 것이 있다고 의심하고, 그렇다면, 그것은 확실하지 않습니다. 그것은 당신의 규칙 정의에 따라 다르고, 다른 사람들이 다르게 생각하고, 요구와 프레임 워크가 다릅니다 ... 당신이 설명한 것은 메타 프로 그램 또는 일부 매크로 시스템으로 달성 될 수 있습니다. Java에는 이러한 접근 방식을 구현하는 데 도움이 될 수있는 프로젝트가 있으며 C# Universe에 동등한 것이 있는지 알 수 없습니다. 그러나 isvalid () 기능은 계약 아이디어에 의한 디자인과 거의 비슷해 보일 수 있습니다. 아마도 그 프레임 워크가있을 수 있습니다.

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