這是很難從你的描述說,但它聽起來就像你寫你自己的MVC框架。爲什麼不使用Spring,Struts或類似的?目前還不清楚你的領域模型有多複雜。
簡而言之您的問題應該怎樣去設計這整個系統呢?是由許多現有的Java MVC的使用一個可能是最好的回答構架
良好的設計鼓勵你將任何棘手的業務邏輯(doStuff()
)出你的控制器和到服務層。您的代碼將更容易測試,而不會與您的控制器綁定。
當你的狀態所以該控制器需要的是selectInputAtLocation(),或changeColor(java.awt.Color中的顏色)或changeSize(INT大小)...這個方法聽起來好像是你增加複雜性的地方不需要。
以Struts爲例,您的HTTP表單POST將包含用戶編輯的數據,並且您的Controller可以在ActionForm
bean中使用這些數據。然後,在決定調用哪種服務方法(類似於您所詢問的戰略模式)之前,先驗證/清理此用戶數據。
關於你的位指示的設計,你可以有一個有每個領域模型類中的一個控制器類這樣
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
}
}
或者你可以有多個控制器類爲每個域對象,以便有在每個只有一個方法像下面
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框架類將有配置,以確定哪些方法被調用等
我開始到t ry並再次回答你的問題,但不幸的是,我必須做出太多的假設,我不知道你的課程目前正試圖教你什麼,以及你有多遠。如果您可以發佈更具體的問題,也許我可以進一步幫助。如果if語句有效,沒有什麼問題。如果您有需要發佈的工作代碼,我們可以幫助您提出改進建議。 – Brad 2011-12-19 14:01:53