POJO
使用POJO名称是为了不和EJB混淆起来, 而且简称比较直接. 其中有一些属性及其getter setter方法的类,有时可以作为value object或dto(Data Transform Object)来使用.当然,如果你有一个简单的运算属性也是可以的,但不允许有业务方法,也不能携带有connection之类的方法。
错误的认识:
POJO是这样的一种“纯粹的”JavaBean,在它里面除了JavaBean规范的方法和属性没有别的东西,即private属性以及对这个属性方法的public的get和set方法。我们会发现这样的JavaBean很“单纯”,它只能装载数据,作为数据存储的载体,而不具有业务逻辑处理的能力。
真正的意思:
POJO = "Plain Old Java Object",是MartinFowler等发明的一个术语,用来表示普通的Java对象,不是JavaBean, EntityBean 或者 SessionBean。POJO不但当任何特殊的角色,也不实现任何特殊的Java框架的接口如,EJB, JDBC等等。
即POJO是一个简单的普通的Java对象,它包含业务逻辑或持久逻辑等,但不是JavaBean、EntityBean等,不具有任何特殊角色和不继承或不实现任何其它Java框架的类或接口。
非侵入式设计
一个客户端的代码可能包含框架功能和客户端自己的功能。
侵入式设计,就是设计者将框架功能“推”给客户端,而非侵入式设计,则是设计者将客户端的功能“拿”到框架中用。
侵入式设计有时候表现为客户端需要继承框架中的类,而非侵入式设计则表现为客户端实现框架提供的接口。
侵入式设计带来的最大缺陷是,当你决定重构你的代码时,发现之前写过的代码只能扔掉。而非侵入式设计则不然,之前写过的代码仍有价值。
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;
- }
- }