어떤 종류의 작업을 수행하는 하위 시스템이 있다고 가정합니다. 그것은 무엇이든 수 있습니다. 분명히이 서브 시스템의 진입 점 (들)에는 입력에 대한 특정 제한 사항이 있습니다. 이 서브 시스템이 주로 GUI에 의해 호출된다고 가정하십시오. 서브 시스템은 유효한지 확인하기 위해 수신하는 모든 입력을 점검해야합니다. 유효하지 않은 입력이있는 경우 FireTheMissles()를 사용하지 않을 것입니다. UI는 또한 잘못되었는지보고해야하기 때문에 유효성 검사에도 관심이 있습니다. 어쩌면 사용자가 런치 패드 자체에서 목표를 지정하는 것을 잊었거나 미사일을 타깃으로 삼았을 수도 있습니다. 물론 null 값을 반환하거나 예외를 throw 할 수는 있지만 사용자에게 구체적으로 무엇이 잘못되었는지는 알 수 없습니다 (물론 각 오류에 대해 별도의 예외 클래스를 작성하지 않으면 if 그게 최선의 방법입니다).입력 유효성 검사에 중복 코드 피하기
물론 예외적 인 경우에도 문제가 있습니다. 사용자는 "Fire Missles!"를 클릭하기 전에 입력이 유효한 지 알고 싶을 수도 있습니다. 단추. 별도의 유효성 검사 함수를 작성할 수 있습니다 (물론 IsValid()는 잘못된 내용을 알려주지 않으므로 실제로 도움이되지 않습니다), 버튼 클릭 핸들러에서 호출하고 FireTheMissles에서 다시 호출합니다) 함수 (이것은 모호한 서브 시스템에서 미사일 발사 프로그램으로 어떻게 바뀌 었는지 정말로 모른다). 분명히 이것은 세계의 끝이 아니지만, 특히이 유효성 검사 기능이 1GB 파일의 해시 계산을 요구하는 경우 변경되지 않은 상태에서 동일한 유효성 검사 기능을 두 번 연속 호출해야합니다.
함수의 전제 조건이 명확하면 GUI가 자체 입력 유효성 검사를 수행 할 수 있지만 입력 유효성 검사 논리를 복제하기 만하면 입력 변경 유효성 검사 논리에 변경 사항이 반영되지 않을 수 있습니다. 물론, 우리는 미사일 목표가 동맹국 내에 있지 않은지 확인하기 위해 GUI에 점검을 추가 할 수 있습니다. 그러나 FireTheMissles() 루틴으로 복사하는 것을 잊어 버리면 우연히 우리 팀을 콘솔 인터페이스.
그래서, 짧은에, 당신은 어떻게 다음 달성 않는다 : 당신은 그냥 뭔가 잘못하지,하지만 특별히 잘못되었는지 알 수
- 입력 유효성 검사를.
- 의존하는 함수를 호출하지 않고이 입력 유효성 검사를 실행할 수있는 기능.
- 이중 검증이 없습니다.
- 중복 코드가 없습니다.
또한 생각해 보았지만 오류 메시지는 FireTheMissles() 메소드에 쓰면 안됩니다. GUI는 GUI가 호출하는 코드가 아니라 적절한 오류 메시지를 선택합니다.
MVC는 입력 유효성 검사에 관한 것 이상입니다.입력 유효성 검사 자체에 도달하면 Binary Worrier가 제안하는 것과 다른 것을 제안하고 있습니까? 그렇다면 어떻게? 그렇지 않다면이 오류 처리 방법을 적용하기 위해 MVC를 수행해야 할 필요가 있습니까? (최종 애플리케이션이 반드시 MVC가 아니 겠지만, 미사일 발사 시스템에서 필요한 것을 알고있는 경우를 제외하고는 GUI에 대해서는 아직 생각조차하지 않습니다.) –
+1 간단히 말해서 : 모델 그것의 어떤 부분에 대해 무엇이 타당한지를 정의하고 누구나 이러한 제약에 유의하도록해야합니다. –