扫盲:POJO、非侵入式设计

本文介绍了POJO的概念及用途,强调其为普通的Java对象,并非JavaBean或EJB。同时,对比了Struts1与WebWork的侵入式与非侵入式设计,阐述了非侵入式设计的优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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的设计是侵入式的: 

[java]  view plain copy
  1.  public class loginAction extends Action{   
  2.   
  3.    public ActionForward execute(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response) throws ActionException{   
  4.   
  5. LoginForm loginForm = (LoginForm)form;   
  6.   
  7. if("scott".equals(loginForm.getUsername() &&"tiger".equals(loginForm.getPassword)))   
  8.   
  9. return mapping.findForward("success");}   
  10.   
  11. else{   
  12.   
  13. return mapping.findForward("failure");}   
  14.   
  15. }   
  16.   
  17. }   
 

而webwork的设计则是非侵入的:

[java]  view plain copy
  1. public class LoginAction implements Action{   
  2.   
  3. private final static String LOGINFAIL = "loginfail";   
  4.   
  5. private final static String SUCCESS = "success";   
  6.   
  7. private String passward;   
  8.   
  9. private String username;   
  10.   
  11. public String getPassword(){   
  12.   
  13. return password;   
  14.   
  15. }   
  16.   
  17. public void setPassword(String password){   
  18.   
  19. this.password = password;   
  20.   
  21. }   
  22.   
  23. public String getUsername(){   
  24.   
  25. return username;   
  26.   
  27. }   
  28.   
  29. public void setUsername(String username){   
  30.   
  31. this.username= username;   
  32.   
  33. }   
  34.   
  35. public String execute() throws Exception{   
  36.   
  37. if("yeeku".equalsIgnoreCase(getUsername())&& "password".equals(getPassword)){   
  38.   
  39. ActionContext ctx= ActionContext.getContext();   
  40.   
  41. Map session = ctx.getSession();   
  42.   
  43. session.put("username",getUsername());   
  44.   
  45. return SUCCESS;   
  46.   
  47. }   
  48.   
  49. else return LOGINFAIL;   
  50.   
  51. }   
  52.   
  53. }   


 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值