非侵入式設計
一個客戶端的代碼可能包含框架功能和客戶端自己的功能。
侵入式設計,就是設計者將框架功能“推”給客戶端,而非侵入式設計,則是設計者將客戶端的功能“拿”到框架中用。
侵入式設計有時候表現為客戶端需要繼承框架中的類,而非侵入式設計則表現為客戶端實現框架提供的接口。
侵入式設計帶來的最大缺陷是,當你決定重構你的代碼時,發現之前寫過的代碼只能扔掉。而非侵入式設計則不然,之前寫過的代碼仍有價值。
struts1的設計是侵入式的:
- public class loginAction extends Action{
- public ActionForward execute(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response) throws ActionException{
- LoginForm loginForm = (LoginForm)form;
- if ( "scott" .equals(loginForm.getUsername() && "tiger" .equals(loginForm.getPassword)))
- { return mapping.findForward( "success" );}
- else {
- return mapping.findForward( "failure" );}
- }
- }
而webwork的設計則是非侵入的:
- public class LoginAction implements Action{
- private final static String LOGINFAIL = "loginfail" ;
- private final static String SUCCESS = "success" ;
- private String passward;
- private String username;
- public String getPassword(){
- return password;
- }
- public void setPassword(String password){
- this .password = password;
- }
- public String getUsername(){
- return username;
- }
- public void setUsername(String username){
- this .username= username;
- }
- public String execute() throws Exception{
- if ( "yeeku" .equalsIgnoreCase(getUsername())&& "password" .equals(getPassword)){
- ActionContext ctx= ActionContext.getContext();
- Map session = ctx.getSession();
- session.put("username" ,getUsername());
- return SUCCESS;
- }
- else return LOGINFAIL;
- }
- }