奔驰cla180首付多少:面向行为编程!继面向对象的新的软件开发模式(探讨)

来源:百度文库 编辑:偶看新闻 时间:2024/05/06 10:54:32

首先这不是一样新技术,而是一种新思想,是基于面向对象思想的一种更符合人的思维习惯的编程模式。如果说面向对象是对现实世界的抽象,那么面向行为就是对人如何与现实世界的交互而做的更易于理解,更动态的封装。该思想的核心是:以“行为”为程序模块的基本单位,在模块开发之前,只需确定该模块 “用来干什么”,而模块的实现,所需参数,返回结果一律不需要关心。从而极大降低模块之间的耦合。

 

传统的软件开发通常以函数为模块的基本单位,其弊端是很明显的。而面向对象的概念中则提供了对象和接口,它的特色是将有关现实世界的一切“名词”封装成一个代码块(类),从而使模块的内聚性有了很大的提高。但在封装一些功能,或者行为等抽象概念时则表现较差,因为在封装成类之前,仍必须先定义(声明)好类的属性、方法的参数、返回值,而这些在程序没有执行之前可能都是未知,无法确定的,我们必须根据经验去定义,说白了点就是猜测。简单来说:一个基本的功能(方法)模块,主要由四个部分组成:方法名、参数、实现、返回值,如图:

 

通过面向对象的思想,可以通过接口或抽象方法,只定义方法名,参数和返回值,而不去理会实现:

 

但这在具体的项目运用中还是不够的,因为有时候一个模块的参数和返回结果根本是不能事先确定定义的!于是笔者很自然地想到当需要一个功能的时候,只需要知道确定这个功能用来干什么(行为),把参数和返回值也统统忽略呢?


 

比如说我们需要实现一个网站的登录功能,首先我们想到的是定义方法:

bool Login(String account, String password); 根据经验,要登录,我们需要:account(账号)和password(密码),返回结果是成功或者失败(true or false)。但事实可能并不这么简单,因为假如在登录成功后,我们可能还需要向服务器的session变量里保存该用户的信息(对象),我们还需要一个参数:服务器Session, 和一个结果:对象User. 假如登录失败,我们可能还需要知道失败的原因(错误码),因为登录失败的原因有许多种:比如密码错误,账号不存在,数据库异常等等,这时网站管理员可能就需要返回一个错误码。

 

而面向行为的编程则能很好的解决这一点,假设我们要实现一个网站的登录功能,我们只需声明一下这个行为:Behavior Login;就这么简单。要实现该功能,只需重写该行为下的doing()方法。而该功能所需要的参数,返回结果集在实现里用:this.getParameter(String paraName),  this.resultSet.set(String resultName, Object value)方法获取。

 

于是我用Java类对“行为”进行了一个封装,用来模拟“行为”的用法。并定义了一个服务器行为ServerBehavior, 实现了一个简单的面向行为的J2EE框架。实际上这不是个框架,我只是将服务器(Servlet)的“行为”进行了一个定义,定义是(笔者对服务器行为的理解):接收页面表单参数,调用相关业务行为,页面跳转(或者传出ajax数据)。

 

再拿网站登录来说吧,首先,我们只需确定一个行为:"登录(Login)",然后将其定义,继承一个行为类:

 

Java代码  
  1. public class Login extends Behavior {  
  2.           
  3.         protected void doing() throws ParameterNotFoundException,  
  4.                 ResultNotFoundException, BehaviorNotFoundException {  
  5.               
  6.               
  7.         }  
  8.   
  9. }  

 

然后我们就可以不管参数,结果如何直接实现该行为:

首先得到账户名和密码:

 

Java代码  
  1. protected void doing() throws ParameterNotFoundException,  
  2.                 ResultNotFoundException, BehaviorNotFoundException {  
  3.               
  4.     //登录名  
  5.     String name = (String) this.getParameter("name");  
  6.     //密码  
  7.     String password = (String) this.getParameter("password");  
  8. }  
 

然后我们声明并调用下一个“行为”:账户验证,这个行为将登录名和密码提交到数据库中进行验证,如果登录成功,返回User实体。但我们根本不必关心这个行为是如何实现的,在项目开发中,它可能完全由另一个人负责。所以,我只需直接声明该行为:

 

Java代码  
  1. protected void doing() throws ParameterNotFoundException,  
  2.                 ResultNotFoundException, BehaviorNotFoundException {  
  3.               
  4.     //登录名  
  5.     String name = (String) this.getParameter("name");  
  6.     //密码  
  7.     String password = (String) this.getParameter("password");  
  8.                   
  9.               
  10.     Behavior checking = Behavior.getInstance("checking");  
  11. }  

 然后将它可能需要的参数name 和 password进行注入,执行,得到一个结果集:

 

Java代码  
  1. Behavior checking = Behavior.getInstance("checking");  
  2. checking.setParameter("name", name);  
  3. checking.setParameter("password", password);  
  4. ResultSet resultSet = checking.execute();  

 最后,从结果集里取我们想要的,是否成功:

 

Java代码  
  1. boolean success = (Boolean) resultSet.get("success");  

 如果成功,再从结果集中取出User实体,并跳转到登录成功的界面,如果失败,则提示登录失败:

 

Java代码  
  1. if (success) {  
  2.   
  3.     HttpSession session = (HttpSession) this.getParameter("session");  
  4.     session.setAttribute("user", resultSet.get("user"));  
  5.     this.resultSet.set("redirect", "/boApp/success.jsp");  
  6. } else {  
  7.   
  8.     this.resultSet.set("redirect", "/boApp/failed.jsp");  
  9. }  
  10.               
 

一个登录行为就这样实现好了!具体的内部与数据库交互的实现由行为Checking来完成,当然它也可能调用别的行为,这就要看项目之前的设计文档了。

 

 最后页面表单:(表单action提交的url正是我们刚刚定义的Login行为。为了区别与一般的servlet,我在行为url后加了后缀".bh")

 

Html代码  
  1.   
  2.         

    账号:

      
  3.         

    密码:

      
  4.         

    登陆

      
  5.   

 

由于我们运用了“行为”作为模块的基本单位,而模块所需的参数,返回结果都不需要事先声明定义,所以在模块独立性,可扩展性上都有了一个质的飞跃。但有利必有弊,模块灵活性独立性的提高,必将带来运行效率的降低。

 

最后附上源码,其实代码的实现非常简单,核心只有两个类,主要表达的是面向行为的思想。里面还有我用面向行为框架做的一个小demo,一个简单的网页聊天系统。本来这个系统我用传统的jsp+servlet实现的非常复杂,模块代码也比较混乱,但使用“行为”包装后,系统的各个模块功能,步骤都显得非常清晰,只用了几个“行为”的“组装”就统统搞定了。

 

欢迎各位大虾与我探讨!

  • Behavior-Oriented.rar (1.1 MB)