2011-12-19 2 views
1

내 프로그램의 컨트롤러 구성 요소에 대한 전략 패턴을 구현하려고합니다.컨트롤러에서 전략 패턴을 구현하는 방법

빈 캔버스에 항목을 만들 수있는 CreateViewState와 같은 다른 뷰 상태가 있으므로 createInput(), addToModel()stuff과 같은 메서드가 필요합니다.

내가 가지고있는 또 다른 상태는 이전에 추가 한 항목을 편집 할 수있는 EditViewState입니다. 입력을 선택한 다음 색상이나 크기 등을 변경합니다. 컨트롤러가 필요 방법은 selectInputAtLocation(), 또는 changeColor(java.awt.Color color) 또는 changeSize(int size) ...

나는 그것이 내가 repOK()와 같은 일반적인 방법이있는 IController 인터페이스를 만들어 가야하는 방법, toString()보다 thisWasTheLocation 같은 몇 가지 (그래서 int x, int y) 뷰가 정적으로 호출하여 화면에서 누른 위치를 컨트롤러로 전달합니다.

그러나 특정 직업을 수행하는 데 나는 그들이 가지고있는 공통된 방법이 없습니다. 나는 doStuff(Item item) 메소드를 인터페이스에 넣은 다음 컨트롤러 로직을 수행하여 클라이언트 코드가 전체 코드에서 IController.getInstance().doStuff(item)을 사용할 수 있도록 할 생각이었습니다. 내가 예측할 수있는 한 특정 메소드를 호출하면 제어기를 캐스팅해야합니다 (editController의 경우 changeColor(), createController의 경우 createInput()).

인터페이스에서 doStuff() 메서드를 만들면 editController (특히 언급하지 않은 7-8 개 이상의 메서드가 있음)에 대해 많은 if 문을 구현해야합니다.

이 전체 시스템을 설계하려면 어떻게해야합니까?

P.S : Controllers는 싱글이다 그러므로 getInstance()

+0

다음

public class ThingReadAction extends ActionSupport { public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest req, HttpServletResponse resp) // call service layer to read a Thing.java } } public class ThingDeleteAction extends ActionSupport { public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest req, HttpServletResponse resp) // call service layer to delete a Thing.java } } etc ... 

선택된 MVC 프레임 워크와 같은 클래스는 등 전화를받을하는 방법을 결정하는 구성을해야합니다 그리고 귀하의 질문에 다시 답변하십시오.하지만 불행히도 제가 가정해야 할 많은 가정이 있으며 귀하의 코스가 현재 귀하에게 가르치려는 것을 알지 못하고 귀하와 얼마나 멀리 있는지 가르쳐주지 않습니다. 좀 더 구체적인 질문을 게시 할 수 있다면 더 멀리 도울 수 있습니다. 그것이 작동한다면'if' 문에는 아무런 문제가 없습니다. 게시 할 작업 코드가 있으면 개선 제안을 할 수 있습니다. – Brad

답변

0

그것은 당신의 설명에서 말하기 어렵지만, 당신이 당신의 자신의 MVC 프레임 워크를 작성하는 것처럼 들린다. 스프링, 스트럿츠 등을 사용하지 않는 이유는 무엇입니까? 도메인 모델이 얼마나 복잡한 지 분명하지 않습니다.

간단한 질문에 이 전체 시스템을 설계하려면 어떻게해야합니까? 아마 가장 많은 기존의 자바 MVC의 하나를 사용하여 응답됩니다

좋은 디자인이 당신의 컨트롤러에서 그리고 서비스 레이어로 어떤 까다로운 비즈니스 로직 (doStuff())를 이동 할 것을 권장 프레임 워크. 코드는 테스트하기가 쉽고 컨트롤러에 묶여 있지 않습니다. 당신이 컨트롤러가 selectInputAtLocation() 또는 changeColor (java.awt.Color의 색) 또는 changeSize (INT 크기) ...입니다 필요 그래서 방법을 명시하는 경우

이 당신이 복잡한 곳을 추가하는 것처럼 나에게 소리 필요하지 않습니다.

예제로 Struts를 사용하면 HTTP 양식 POST에 사용자가 편집 한 데이터가 포함되며 컨트롤러에 ActionForm 빈으로 사용할 수 있습니다. 그런 다음 호출 할 Service 메소드를 결정하기 전에이 사용자 데이터의 유효성을 확인/위생 처리합니다 (요청하는 Strategy 패턴과 비슷 함).당신의 콘트롤 디자인에 관한

하나이

public class ThingDispatchAction extends DispatchActionSupport { 

    public ActionForward read(ActionMapping mapping, ActionForm form, HttpServletRequest req, HttpServletResponse resp) 
     // call service layer to read a Thing.java 
    } 

    public ActionForward edit(ActionMapping mapping, ActionForm form, HttpServletRequest req, HttpServletResponse resp) 
     // call service layer to update a Thing.java 
    } 

    public ActionForward create(ActionMapping mapping, ActionForm form, HttpServletRequest req, HttpServletResponse resp) 
     // call service layer to create a new Thing.java 
    } 

    public ActionForward save(ActionMapping mapping, ActionForm form, HttpServletRequest req, HttpServletResponse resp) 
     // call service layer to persist a Thing.java 
    } 

    public ActionForward delete(ActionMapping mapping, ActionForm form, HttpServletRequest req, HttpServletResponse resp) 
     // call service layer to delete a Thing.java 
    } 
} 

같은 도메인 모델 클래스 당 하나 개의 컨트롤러 클래스가있을 수 또는 각 하나 개의 방법이있다 있도록 각 도메인 개체에 대해 여러 컨트롤러 클래스를 가질 수있다 나는 T로 시작

+0

이는 내가 .. 내가하려고 모든 완전히 다른 물건을 할 수있는 MVC 시스템의 컨트롤러에 대한 전략 패턴을 구현입니다 같은 봄 또는 스트럿츠와 같은 프레임 워크를 사용하지 오전 클래스에 대한 숙제입니다. – eytanfb

+0

"숙제"를 포함하도록 태그를 업데이트해야 사람들이 상황을 알 수 있습니다. 그렇지 않으면 "현실적인"문제가 있다고 가정합니다. – Brad

+0

죄송합니다, 새로운 걸까요. – eytanfb