侵入式和非侵入式的区别

非侵入式设计

一个客户端的代码可能包含框架功能和客户端自己的功能。

侵入式设计,就是设计者将框架功能“推”给客户端,而非侵入式设计,则是设计者将客户端的功能“拿”到框架中用。

侵入式设计有时候表现为客户端需要继承框架中的类,而非侵入式设计则表现为客户端实现框架提供的接口。

侵入式设计带来的最大缺陷是,当你决定重构你的代码时,发现之前写过的代码只能扔掉。而非侵入式设计则不然,之前写过的代码仍有价值。

struts1的设计是侵入式的:

  1. public class loginAction extends Action{
  2. public ActionForward execute(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response) throws ActionException{
  3. LoginForm loginForm = (LoginForm)form;
  4. if ( "scott" .equals(loginForm.getUsername() && "tiger" .equals(loginForm.getPassword)))
  5. { return mapping.findForward( "success" );}
  6. else {
  7. return mapping.findForward( "failure" );}
  8. }
  9. }

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

    1. public class LoginAction implements Action{
    2. private final static String LOGINFAIL = "loginfail" ;
    3. private final static String SUCCESS = "success" ;
    4. private String passward;
    5. private String username;
    6. public String getPassword(){
    7. return password;
    8. }
    9. public void setPassword(String password){
    10. this .password = password;
    11. }
    12. public String getUsername(){
    13. return username;
    14. }
    15. public void setUsername(String username){
    16. this .username= username;
    17. }
    18. public String execute() throws Exception{
    19. if ( "yeeku" .equalsIgnoreCase(getUsername())&& "password" .equals(getPassword)){
    20. ActionContext ctx= ActionContext.getContext();
    21. Map session = ctx.getSession();
    22. session.put("username" ,getUsername());
    23. return SUCCESS;
    24. }
    25. else return LOGINFAIL;
    26. }
    27. }
时间: 2024-11-13 07:58:51

侵入式和非侵入式的区别的相关文章

Spring 侵入式和非侵入式

1.非侵入式的技术体现 允许在应用系统中自由选择和组装Spring框架的各个功能模块,并且不强制要求应用系统的类必须从Spring框架的系统API的某个类来继承或者实现某个接口. 2.如何实现非侵入式的设计目标的 1)应用反射机制,通过动态调用的方式来提供各方面的功能,建立核心组间BeanFactory 2)配合使用Spring框架中的BeanWrapper和BeanFactory组件类最终达到对象的实例创建和属性注入 3)优点:允许所开发出来的应用系统能够在不用的环境中自由移植,不需要修改应用

Java基础知识强化之多线程笔记07:同步、异步、阻塞式、非阻塞式 的联系与区别

1. 同步: 所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回.但是一旦调用返回,就必须先得到返回值了. 换句话话说,调用者主动等待这个"调用"的结果. 对于同步调用来说,很多时候当前线程还是激活的,只是从逻辑上当前函数没有返回而已. 2. 异步: 所谓异步,"调用"在发出之后,这个调用就直接返回了,所以没有返回结果. 换句话说,当一个异步过程调用发出后,调用者不会立刻得到结果.而是在"调用"发出后,"被调用者&q

PHP PDO_MYSQL 链式操作 非链式操作类

<?php /* vim: set expandtab tabstop=4 shiftwidth=4: */ // +----------------------------------------------------------------------+ // | PHP version 5 | // +----------------------------------------------------------------------+ // | Copyright (c) 199

登录式与非登录式&amp;交互式与非交互式shell及其环境初始化过程

交互式shell和非交互式shell(interactive shell and non-interactive shell) 交互式模式就是在终端上执行,shell等待你的输入,并且立即执行你提交的命令.这种模式被称作交互式是因为shell与用户进行交互.这种模式也是大多数用户非常熟悉的:登录.执行一些命令.退出.当你退出后,shell也终止了. shell也可以运行在另外一种模式:非交互式模式,以shell script(非交互)方式执行.在这种模式 下,shell不与你进行交互,而是读取存

Java基础:非阻塞式IO

转载请注明出处:jiq?钦's technical Blog 引言 JDK1.4中引入了NIO,即New IO,目的在于提高IO速度.特别注意JavaNIO不完全是非阻塞式IO(No-Blocking IO),因为其中部分通道(如FileChannel)只能运行在阻塞模式下,而其他的通道可以在阻塞式和非阻塞式之间进行选择. 尽管这样,我们还是习惯将Java NIO看作是非阻塞式IO,而前面介绍的面向流(字节/字符)的IO类库则是非阻塞的,详细来看,两者区别如下: IO NIO 面向流(Strea

Android基于AOP的非侵入式监控之——AspectJ实战

一引言 二什么是AspectJ 1 它只是一个代码编译器 2 它是用来做AOP编程的 3为什么要用AspectJ 三AspectJ原理与运用 1 基本原理 2 使用方式 21 纯注解方式 22 AspectJ语言 23 结合自定义注解使用 四AspectJ实战监听方法执行耗时打印并输出 五一些比较常见的问题 六推荐文章 一.引言 本博文的目的不是详细的介绍AspectJ的细节,而是最近项目用到了AspectJ,因此对其作了一些使用和重要概念上的总结. 相信很多做过Web的同学对AspectJ都不

BlockCanary 一个轻量的,非侵入式的性能监控组件(阿里)

开发者博客: BlockCanary — 轻松找出Android App界面卡顿元凶 开源代码:moduth/blockcanary BlockCanary对主线程操作进行了完全透明的监控,并能输出有效的信息,帮助开发分析.定位到问题所在,迅速优化应用.其特点有: 非侵入式,简单的两行就打开监控,不需要到处打点,破坏代码优雅性. 精准,输出的信息可以帮助定位到问题所在(精确到行),不需要像Logcat一样,慢慢去找. 目前包括了核心监控输出文件,以及UI显示卡顿信息功能.仅支持Android端.

MVC的验证(模型注解和非侵入式脚本的结合使用)

@HtmlHrlper方式创建的标签,会自动生成一些属性,其中一些属性就是关于验证 如图示例: 模型注解 通过模型注解后,MVC的验证,包括前台客户端,后台服务器的验证,MVC统统都做了包含,即使用户在客户端禁用Javascript,服务器也会将非法操作进行验证,当前前提是针对Model实体标识了注解的情况. 要能够正常进行非空等合法性验证必须做如下步骤(前提条件): 1.必须在实体的每个类型上加上Required特性,但是数字型的属性默认已经加上了. 2.必须在视图上导入如下脚本: <scri

eclipse插件安装:非侵入式方法

非侵入式安装插件方法(links安装方法) 既然有侵入式的安装,言下之意,还有个“非侵入式安装”,也有人成为links安装方法,下面看究竟是如何安装的:). 非侵入式安装也分两种,一种是绝对路径安装方法,一种是相对路径的安装方法.首先看绝对路径的安装的方法. 在上面安装过程中,我们将中文语言包NLpack1-eclipse-SDK-3.2.1-win32.zip插件解压缩到一个地方假设为F:\myplugins目录文件夹的目录结构如下: NLpack1-eclipse-SDK-3.2.1-win