문제

만들어 보는 것이 좋은지 궁금합니다. 검증 ~에 게터 그리고 세터, 또는 코드의 다른 곳에서.

이 사실이 당신을 놀라게 할 수도 있습니다. 최적화 그리고 고속 진행 코드를 작성하려면 getter와 setter에서 확인하는 것이 아니라 현재 있는 코드에서 확인해야 한다고 생각합니다. 업데이트 중 귀하의 파일이나 데이터베이스.내가 잘못?

도움이 되었습니까?

해결책

클래스가 일반적으로 공개 getter/setter와 함께 비공개 멤버를 포함하는 이유 중 하나는 바로 데이터를 확인할 수 있기 때문입니다.

1에서 100 사이의 숫자가 있는 경우 이를 검증하는 무언가를 setter에 넣은 다음 코드에서 포착되는 예외를 던질 수도 있습니다.이유는 간단합니다.setter에서 하지 않으면 설정할 때마다 1~100이라는 제한이 있어서 코드가 중복되거나 잊어버리면 잘못된 상태가 된다는 점을 기억해야 합니다.

성능에 관해서는 Knuth와 함께 있습니다.

"약 97%의 경우 작은 효율성은 잊어야 합니다.성급한 최적화는 모든 악의 근원이다."

다른 팁

@Terrapin, 답변:

간단한 공개 세트/get] 속성이 있다면 ...그들은 필드 일 수도 있습니다

속성은 필드에 비해 다른 장점도 있습니다.이는 보다 명시적인 계약이고 직렬화되어 있으며 나중에 디버깅할 수 있고 상속을 통해 확장하기에 좋은 장소입니다.더 투박한 구문은 우연한 복잡성입니다. 예를 들어 .net 3.5는 이를 극복합니다.

일반적인 (그리고 결함이 있는) 관행은 공개 필드에서 시작하여 나중에 '필요에 따라' 속성으로 전환하는 것입니다.이로 인해 클래스를 소비하는 모든 사람과의 계약이 중단되므로 속성부터 시작하는 것이 가장 좋습니다.

때에 따라 다르지.

일반적으로 코드는 빠르게 실패합니다.값이 코드의 여러 지점으로 설정될 수 있고 값을 검색한 후에만 유효성을 검사하는 경우 업데이트를 수행하는 코드에 버그가 있는 것으로 나타납니다.설정자가 입력의 유효성을 검사하면 어떤 코드가 잘못된 값을 설정하려고 하는지 알 수 있습니다.

가장 유지 관리하기 쉬운 코드를 갖는다는 관점에서 볼 때 속성 설정자에서 최대한 많은 유효성 검사를 수행해야 한다고 생각합니다.이렇게 하면 잘못된 데이터를 캐싱하거나 처리하지 않아도 됩니다.

결국 이것이 속성의 의미입니다.당신이 가진 것이 다음과 같은 속성들뿐이라면...

public string Name
{
    get
    {
        return _name;
    }
    set
    {
        _name = value;
    }
}

...들판이 될 수도 있어

확인해 보세요. 도메인 중심 설계, 에릭 에반스.DDD에는 다음과 같은 사양 개념이 있습니다.

...특수한 목적을위한 명백한 술어와 같은 가치 객체.사양은 객체가 일부 기준을 만족시키는 지 여부를 결정하는 술어입니다.

빠른 실패가 하나이고, 다른 하나는 검증을 위한 논리를 어디에 두어야 하는가라고 생각합니다.도메인은 논리를 유지하기에 적합한 장소이며 사양 개체나 도메인 개체의 유효성 검사 메서드가 좋은 장소라고 생각합니다.

유효성 검사는 유효성 검사 메서드의 getter 또는 setter와 별도로 캡처되어야 합니다.이렇게 하면 여러 구성 요소에서 유효성 검사를 재사용해야 하는 경우 사용할 수 있습니다.

setter가 호출되면 이러한 유효성 검사 서비스를 활용하여 객체에 대한 입력을 삭제해야 합니다.이렇게 하면 객체에 저장된 모든 정보가 항상 유효하다는 것을 알 수 있습니다.

객체에 대한 정보가 이미 유효하다고 신뢰되기 때문에 getter에 대해 어떤 종류의 유효성 검사도 필요하지 않습니다.

데이터베이스가 업데이트될 때까지 유효성 검사를 저장하지 마세요!!더 나은 빨리 실패하다.

나는 구현하는 것을 좋아한다 IDataErrorInfo 내 유효성 검사 논리를 Error 및 this[columnName] 속성에 넣습니다.이렇게 하면 오류가 있는지 프로그래밍 방식으로 확인하려는 경우 코드에서 해당 속성 중 하나를 간단히 테스트하거나 Web Forms, Windows Forms 또는 WPF의 데이터 바인딩에 유효성 검사를 전달할 수 있습니다.

WPF의 "ValidatesOnDataError" 바인딩 속성을 사용하면 이 작업이 특히 쉬워집니다.

나는 내 개체가 잘못된 상태에 들어가지 않도록 노력하므로 설정자는 상태를 변경하는 모든 메서드뿐만 아니라 유효성 검사도 확실히 갖게 됩니다.이렇게 하면 내가 다루고 있는 객체가 유효하지 않다고 걱정할 필요가 없습니다.메서드를 유효성 검사 경계로 유지하면 여기저기에 흩어져 있는 유효성 검사 프레임워크와 IsValid() 메서드 호출에 대해 걱정할 필요가 없습니다.

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