我有一个关于应用 GRASP 控制器模式同时保持其 SOLID 的问题,更具体地说,同时保持它的单一职责。
维基百科的控制器模式定义说:
控制器模式将处理系统事件的责任分配给代表整个系统或用例场景的非 UI 类。控制器对象是负责接收或处理系统事件的非用户界面对象。
关于 SOLID 的单一责任原则:
在面向对象编程中,单一职责原则指出每个类都应该有单一职责,并且该职责应该完全由类封装。它的所有服务都应与该责任密切相关。
让我们来看一些示例代码。假设我有以下 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();
}