1

나는 현재 훈련 계획의 일환으로 간단한 명령 행 기반 헬프 데스크 애플리케이션을 개발하는 임무를 맡고있다. 이 프로젝트의 요점은 디자인 패턴, 솔리드 원리, MVC 아키텍처 등을 사용할 수있는 능력을 개발하는 것입니다.유연한 MVC 구조는 어떻게 만듭니 까?

MVC 구조를 유연하게 유지하는 방법을 이해하는 데 문제가 있습니다. 여기에 내가 이상적으로 나중에 가서 다른 사용자 인터페이스 (뷰 클래스)를 대체 할 수 있도록하려는

public class RegisterController 
{ 
    View view; 
    RegisterModel registerModel; 

    public RegisterController() 
    { 
     registerModel = new RegisterModel(); 
    } 

    public void processRegistration(String username, String password, Role role) 
    { 
     if(registerModel.isRegisterable(username, password)) 
     { 
      User newUser = new User(username, password, role); 
      registerModel.registerUser(newUser); 
      view = new LoginView(new LoginController()); 
     } 
     else 
     { 
      System.out.println("ERROR during registration."); 
      view = new MainView(new MainController()); 
     } 

     view.startView(); 
    } 
} 

내 코드의 한 부분의 샘플 ... 예이다 내 모델 또는 컨트롤러를 변경하지 않고 웹 페이지로 이동할 수 있습니다. 그러나 지금은 명령 줄 "MainView"및 "LoginView"클래스의 구체적인 구현을 코딩하고 있음을 알 수 있습니다.

이 컨트롤러 코드를 좀 더 유연하게 만들 수 있고 최소한의 코드 수정으로 다른 사용자 인터페이스로 대체 할 수 있습니까? 다른 UI로 변경할 때 컨트롤러 코드가 동일하게 유지되는 것을 기대하는 것이 비현실적입니까?

답변

1

MVC/MVP 디자인 패턴의 주요 이점 중 하나는 뷰와 모델을 조롱하면서 프레젠터를 단위 테스트 할 수 있다는 것입니다.

결과적으로 컨트롤러/발표자가 생성자에 인수로 전달 된보기 및 모델로 생성되는 것이 좋습니다. 뷰와 모델이 인터페이스 유형으로 전달되면 테스트 시나리오에서 조롱 된 객체로 대체 될 수 있습니다. 현재의 설계에서는이 패러다임을 깨뜨린 컨트롤러 내에서 구체적인 구현이 선택됩니다.

저는 일반적으로 컨트롤러와 뷰를 하나의 중앙 위치에 연결합니다. 그러나 이것은 컨트롤러가 시공시 값 비싼 계산 작업을 즉시 시작하지 않을 것으로 가정합니다. 이것에 대한 완벽한 대답은 확실치 않지만, 테스트를 할 수 있도록 현재 디자인을 조정해야한다고 확신합니다.

관련 문제