2009-07-29 6 views
0

입니다.이 같은 아키텍처를 고안한다고 가정 해 보겠습니다. 응용 프로그램은 모듈과 모듈로 구성되어 있으며 도메인 별 유틸리티를 사용하여 모델이나 데이터베이스를 변경합니다.데이터 유효성 검사를 담당하는 계층은

예를 들어, 양식을 표시하고 입력을 승인 한 다음 사용자 정보를 삽입하기위한 호출을 수행하는 등록 유틸리티를 사용하는 등록 모듈이 DB를 수행합니다. 누가 데이터 검증을 수행 할 책임이 있습니까?

1) 모듈, 그것이 유틸리티 2) 유틸리티,이 방법에 아래로 '우수한'데이터 전달이 더 의심 데이터가 어느 3)를 통해 얻을 수 없을 것 같이 모두 철저한 데이터 검증 4 있어야한다) 일부 다른 약정

생각들? 의견?

답변

5

데이터를 사용하는 구성 요소는 자체 용도로 데이터의 유효성을 검사합니다.

예를 들면 다음과 같습니다. 서비스 규칙의 일부는 입력 필드가 올바른 이메일 주소인지 확인합니다. 비즈니스 규칙에 따라 입력 필드가 유효합니다. 데이터 계층은 데이터가 특정 길이보다 길지 않은지 유효성을 검사 할 수 있지만 데이터가 데이터베이스 열에 들어갈 수있는 최대 크기이기 때문에 특히 유효하지만 이메일 주소인지 여부는 특별히 중요하지 않습니다.

또한 재사용 할 수있는 위치에 있어야합니다. 따라서 (MVC에서) 위에서 설명한 "유효한 전자 메일"유효성 검사는 하나 이상의 컨트롤러/뷰에서 해당 비즈니스 로직 부분에 대한 입력이 발생할 가능성이 높기 때문에 컨트롤러 또는 뷰로 들어 가지 않습니다. 유효성 확인 로직.

0

유효성 검사는 가능한 모델에 가까워 야합니다. 유틸리티는 모델을 변경하므로 데이터 모듈의 유효성을 신뢰할 수 없어야합니다. 이렇게하면 유틸리티를 재사용하는 것이 더 안전합니다 (유효성 검사 코드를 복사하지 않고 하나 이상의 모듈에서 사용할 수 있음).

반면에 사용자에게 더 가까운 모듈에 유효성 검사를 배치하면 더 나은 환경을 제공합니다 (클라이언트 측 유효성 검사 속도가 빠릅니다). 제 견해로, 가장 좋은 방법은 유틸리티에 유효성 검사를 넣는 것입니다. 모듈에 다른 유효성 검사 계층을 추가하여 사용자 경험을 향상시키는 리소스가있는 경우 나중에 확인하십시오.

0

데이터는 가능한 한 빨리 검증되어야합니다. 즉, 입력 (예 : 사용자 입력)에서 데이터를 읽을 때와 유효성을 검사 할 때 사이에 최소 거리가 있어야합니다. 실용적인 이유는 유효성 검사 코드를보다 쉽게 ​​검토 할 수 있기 때문입니다.

MVC에서는 컨트롤러가 모든 입력 값을 읽은 곳이라고 가정하고 '컨트롤러'에 들어가야한다고 말하고 싶습니다. 컨트롤러는이 방법으로 모델에 유효성이 검사 된 값을 전달합니다.).

즉, 공유 할 수있는 유효성 검사 코드에 공정한 내용이있을 가능성이 높으며 유효성 검사를 위해 직접 헬퍼 코드를 작성할 수 있습니다.

0

유효성 검사를위한 장소는 응용 프로그램 내부의 API 노출과 디자인에서 유효성 검사를 수행해야하는 위치 (즉, 유효성 검사 문제를 소유 한 사람)에 따라 다릅니다.

유효한 전자 메일 주소를 설정하려면 데이터를 수락하는 컨트롤러가 다른 모든 코드에서 올바른 형식의 전자 메일 주소를 예상하므로 데이터를 수락해야합니다. 반면에 데이터베이스 처리를 위해 데이터가 올바르게 이스케이프 처리되었는지 확인하는 것은 실제 SQL 처리 바로 위의 모델 내부 깊숙한 방법에 속합니다.

관련 문제