다음은 일반적인 MVC 프레임 워크 중 하나 인 Struts 2
이 일반적인 사용자 등록을 처리하는 방법입니다.
Registration Page --Submit-->
Filter Dispatcher (Controller) --Struts-->
Interceptor --Stack--> Validator --Passed-->
Action (Model)
--Invokes--> Service/DAO Layer --Persists--> Database
Result <--returns-- Action
JSP (View) (selected based on result)
Interceptor (any post-processing)
Registration Success HTML
실제로 컨트롤러를 쓰지는 않습니다. Struts.xml
을 사용하여 선언적으로 프레임 워크를 구성한 다음 구성된 MVC 플로우 전체를 오케스트레이션합니다.
Controller
은 인터셉터를 통해 유효성 검사를 수행하고 미리 채워지고 유효성이 검사 된 데이터 개체를 모델에 전달하여 데이터베이스에 유지합니다.
public class UserRegistrationAction {
private User user = new User();
public User getModel() { // Struts Callback
return user; // automatically gets populated with validated values
}
// This will seem incorrect to someone used to Spring's setter injection but
// Struts injects in reverse; pulls the model onto a ValueStack to inject properties
public String execute() {
// already validated; simply persist
UserRegistrationService.getInstance().persist(getUser());
return Action.SUCCESS;
}
...
}
그렇다면 컨트롤러에서 유효성 검사를 구현하는 것이 맞습니다.
그러나 그 말은 데이터의 처리는 항상 모델에서 발생해야합니다.그들은 자신의 페이스 북 친구 목록 또는 Gmail의 연락처 목록을 가져올 것인지 당신은 또한 사용자에게 물어 봤다 그리고 그들은 합의하고 필요한 세부 정보를 제공한다고 가정 :
public String execute() {
user.setContactsList(
thirdPartyService.getInstance(getPartyCode()).fetchContacts(user.getAuthInfo())
);
UserRegistrationService.getInstance().persist(getUser());
return Action.SUCCESS;
}
타사 서비스를 인증하고 다른 가져 오는의 논리 사용자 개체를 유지하기 전에 User 개체를 업데이트하는 세부 정보가 모델에도 저장됩니다. 이는 비즈니스 로직을 구성하고 컨트롤러 (서블릿, 스터드 또는 스프링 MVC)를 구현하는 데 사용하는 기술과 독립적 인 독립 실행 형 모델 클래스로 캡슐화해야하기 때문입니다.
이상적으로 컨트롤러에 대한 교차 절단 문제 (인증, 인증, 캐싱 등) 만 제외하고 핵심 비즈니스 로직을 모델 내에 남겨 두는 것이 이상적입니다.
글쎄, 만약 당신이 애플의 MVC를 사용한다면, 나는 컨트롤러가 폼 데이터를 파싱하고 그 데이터로 모델을 만들어야한다고 말하고 싶다. '전통적인'MVC를 사용한다면 Model이이를 처리해야한다고 말하고 싶습니다. – 11684
어떤 MVC 프레임 워크를 사용하고 있습니까? –
모트 가능성이 높습니다 : [MVC에서 $ _POST 데이터를 처리하는 올바른 방법은 무엇입니까?] (http://stackoverflow.com/q/13359818/727208) –