我有一個應用GRASP控制器模式的問題,同時保持它固體,更具體地說,同時保持它與一個責任。SOLID GRASP控制器模式?
Wikipedia's控制器模式定義說:
的控制器模式與分配系統事件處理,以代表整個系統或一種使用情形,非UI類的責任。 Controller對象是負責接收或處理系統事件的非用戶界面對象。
而關於SOLID的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
謝謝!事情現在更清晰了! –