1

MVC 모범 사례는 모델이 입력/데이터 유효성 검사를 처리해야한다고 명시합니다.ColdFusion Model-Glue를 사용하여 모델에서 데이터 유효성 검사를 어떻게 처리합니까?

component 
{ 
    public void function CreateNewUser(string username, string password, string email) 
    { 
     // create account 
    } 
} 

그런 다음 우리는 그 프로세스 컨트롤러를 가지고 :

Username - not null, not already in DB 
Password - not null, alphanumeric only 
E-mail - not null, not already in DB, valid e-mail format 

우리는 CreateNewUser() 기능과 AccountModel이 : 이제 우리는 다음과 같은 필드와 제약, ​​새 사용자 계정을 생성하는 모델을 가지고 있다고 가정 해 봅시다 양식을 게시하고 모델에 계정을 생성하라는 메시지를 전합니다.

component 
{ 
    public void function NewUser() 
    { 
     var username = event.getValue("username"); 
     var password = event.getValue("password"); 
     var email = event.getValue("email"); 

     var accountModel = new AccountModel(); 
     accountModel.CreateNewUser(username, password, email); 

     event.addResult("UserCreated"); 
} 

이제 유효성을 추가하고 싶습니다. 사용자가 세 필드 모두에 대한 입력을 제공하지 못하면 응용 프로그램에 사용자에게 세 번의 유효성 검증 오류 메시지가 표시됩니다. 컨트롤러에서 수행하기가 쉽습니다.

// assumes that ValidateInput() is a function on the controller that returns an array 
var validationErrors = ValidateInput(username, password, email); 

// if there were any validation errors, return a ValidationError result 
if (len(validationErrors) 
{ 
    event.setValue("validationerrors", validationErrors); 
    event.addResult("ValidationError"); 
} 
else 
{ 
    event.addResult("UserCreated"); 
} 

그리고 뷰는 validationerrors 변수를 가져오고 오류 메시지를 표시합니다.

그러나이 논리는 모델에 있어야합니다. 어떻게해야합니까? 두 가지 방법을 생각해 볼 수 있습니다.

방법 1 : 컨트롤러에서 모델로 이동하십시오. 이제 컨트롤러는 CreateNewUser() 전에 ValidateInput()을 먼저 호출해야합니다. 프로그래머가 이것을 잊어 버리면 CreateNewUser()은 유효성 검사 예외를 throw합니다. 단점은 유효성 검사가 필요한 모든 데이터 작업에는 if/else 블록이 필요하다는 것입니다.

방법 2 :ValidateInput()을 호출하고 CreateNewUser()을 직접 호출해야합니다. 유효성 검사 오류가있는 경우 예외가 발생하고 오류 메시지 배열이 포함됩니다. 이 방법은 C#에서 작동하지만 ColdFusion은 예외가있는 데이터 반환을 지원하지 않으며 예외 메시지 및 유형 만 지원합니다. 또한 모든 데이터 작업에는 try/catch 블록이 필요합니다.

방법 3 : ??

이 경우 유효성 검사를 어떻게 처리 하시겠습니까? 방법 1은 모델에서 유효성 검사를 할 때 대부분의 사람들이하는 일입니까? 아니면 사람들은 일반적으로 방법 2를 사용합니까? 아니면 내가 생각하지 못하는 방법 3이 있습니까?

답변

0

사용자의 데이터 입력에 대한 유효성 검사를 사용자 계정 작성과 결합해야한다고 생각하지 않습니다. 사용자 계정 작성에 너무 많은 차이가 있습니다.

두 가지를 함께 사용하면 계정을 만들 때마다 기본적으로 양식 유효성 검사를 수행한다는 의미이며 이는 나에게 맞지 않습니다.

궁극적으로 해당 데이터에서 생성 될 수있는 객체에 대한 우려보다는 양식의 유효성 검사가 UI의 문제로 간주됩니다. 당연히 createNewUser() 메소드에는 고유 한 비즈니스 규칙이 있습니다 (이는 새 사용자 작성을위한 유효성 검증과 밀접한 관계가 있지만 여전히 별개의 문제입니다).

다소 비현실적 일지 모르지만 validateUserData() (또는 무언가) 메소드를 사용자 정의 CFC에 추가하여 양식 유효성 검사 모델에서 유효성 확인을 돕기 위해 호출합니다. 즉, 사용자의 비즈니스 규칙은 동일한 위치에 있으므로 별도로 호출 할 수 있습니다.그런 다음 createNewUser()는 가비지 인/쓰레기 출력 원리에서 작동합니다.

사이드 노트 : createNewUser()는 회귀적인 이름인데, innit입니까? 새로운 종류의 사용자가 아닌 다른 종류의 사용자를 만들 수 있습니까? 또한, 귀하의 Account.cfc에 있다면; 새 사용자 또는 새 계정을 만들었습니까? 계정과 사용자가 동의어가 아니며 사용자가 없어도 계정이 존재할 수도 있고 (그 반대의 경우도) 아마도 User.cfc가 있어야합니다. 다시 말하면, 우리에게 준이 코드는 단순히 일러스트레이션을위한 것이고이 모든 것을 다 다루었습니다.

+0

응답 해 주셔서 감사합니다. 이 코드는 단지 설명을위한 것입니다 :). 나는 중간에 길을 따라 간 것 같아서, 내 마음이 계정을 사용자로 전환했다. –