GRASP 컨트롤러 패턴을 솔리드로 유지하면서 더 구체적으로 단일 책임으로 유지하면서 GRASP 컨트롤러 패턴을 적용하는 것에 대한 질문이 있습니다.SOLID GRASP 컨트롤러 패턴?
Wikipedia's 컨트롤러 패턴 정의는 말한다 :
컨트롤러 패턴이 전체 시스템 또는 유스 케이스 시나리오를 나타내는 비 UI 클래스에 시스템 이벤트를 처리하는 책임을 할당합니다. Controller 객체는 시스템 이벤트를 수신하거나 처리하는 비 사용자 인터페이스 객체입니다.
고체의 single responsibility principle에 대한
는 : 객체 지향 프로그래밍에서, 모든 클래스는 하나의 책임이 있어야 단일 책임 원칙은, 그 책임은 전적으로 클래스로 캡슐화한다. 모든 서비스는 그 책임과 협의해야합니다.
몇 가지 예제 코드를 살펴 보겠습니다. 다음 Java 클래스가 있다고 가정 해 봅시다.
public class foo {
public foo(){}
public int foo1(){/*Some code*/}
public String foo2(){/*Some code*/}
public String foo3(int foo31){/*Some code*/}
}
public class bar {
public bar(){}
public int bar1(){/*Some code*/}
public String bar2(){/*Some code*/}
public String bar3(int bar31){/*Some code*/}
}
하나의 책임을 맡고 좋은 컨트롤러 구현은 무엇입니까? 유스 케이스를 그냥 통과해야합니까? 예 :
public class bazController {
private foo fooInstance;
private bar barInstance;
public bazController(){
this.fooInstance = new foo();
this.barInstance = new bar();
}
public void fooAction1(int arg){
this.foo.foo3(arg);
}
public void barAction1(int arg){
this.bar.bar3(arg);
}
public void fooAction2(){
this.foo.foo1();
}
public void barAction2(){
this.bar.bar1();
}
}
여기에 한 가지 책임이 있습니까? 내가 이것을하고있는 것입니까, 아니면 이것을 정확하게 이해하고 있습니까? 미리 감사드립니다.
편집 : bazController
에이 방법이있어서 두 클래스가 모두 관련되면 어떻게됩니까?
public int bazAction(){
return this.foo.fooAction1() + this.bar.barAction1();
}
감사합니다. 두 수업 모두 관련성이 있다면 어떻게 될까요? 방금 내 글을 편집했습니다. 또한 나는 단순성을 위해 의도적으로 그 원칙을 깨뜨리고있다. –
@ user1231958 - 대답을 업데이트했습니다. – NaveenBhat
감사합니다. 상황은 지금 더 명확합니다! –