什么是动作?
动作是NoahWeb中极为重要的一个概念,浏览器与服务器一个完整的上下交互行程都可以理解成一个动作。
动作编程与以往的过程编程和对象编程是截然不同的一种编程思路。过程编程已经被某种意义上被淘汰在此就不做讨论,而动作编程与对象编程相比较,他们之间最大的区别在于“高度”的不同。
类、对象带给我们的面向对象编程可以让我们方便的在众多领域中进行复杂、高效的编程实现应用。每个有过对象编程学习经历的人在最初学习时也许都被问过“这个世界是由什么组成的?”通过这个方法以便让大家能直观的了解对象和类,而对象和类更可以让我们用最初认知的世界方式来理解和描述计算机中的各种功能和值。可是,对于网站、MIS或业务系统这些轻量级B/S架构的应用,对象编程也许并不是一种最好选择。
对于客户——程序结构设计重要还是流程设计重要?
类、对象提供了我们一种去描述计算机程序内各种能力和值的方式,可类、对象也是一种很“低级”的描述方式。
我们可以通过类和对象的方式来假设设计一个批发商买卖矿泉水的程序:
首先,您需要使用对象的方式描述水的各种属性和它具有的能力,而水是被装在瓶子里,所以对于装水的瓶子您也需要用类或对象的方式去描述一下瓶子的属性和能力,瓶子需要被装在箱子里,所以您也需要去用类或对象的方式去描述一下箱子……到此暂停!
回头看一下使用类和对象的时候我们在做什么?我们在进行对象之间的关系设计。而我们最初目的是什么?是设计一个批发商买卖矿泉水的流程。
看一下使用动作编程是怎么设计整个流程的:
订单确认—>出库—>装货—>送货—>收款
订单确认、出库、装货、送货、收款每个都是一个动作,而这些动作组合在一起构成了一个买卖矿泉水的动作流程。或许您还认为上述整个买卖矿泉水流程不合理应该是另一个更合理的流程。这样考虑就对了,因为您现在更多的时间已经花在为您的用户设计流程,而不是考虑设计整个类和对象之间的关系。
对于系统的用户我们为他考虑的不应该是程序结构方面的设计,而应该更多的是流程方面的设计。在使用动作方式后,您关注的不再是类和对象之间的关系,而是整个流程的设计。
一级还是多级?
我们还是继续来看批发商买卖矿泉水的流程设计,对象编程时,水和瓶子之间是存在关系,瓶子和箱子之又存在关系,再往上设计,或许还有批发商对象,买卖矿泉水的这个行为是由箱子这个对象来具备的.
这使整个系统对象有了三级的层深。是不是所有系统我们都需要把对象之间的关系弄的那么复杂?我们看一下用动作来设计时的情况:
用动作来设计时,批发商、箱子、瓶子、水或乃至货币在整个流程中仅是以一种资源的形式存在着。水就水、瓶子就是瓶子、箱子就是箱子,他们之间有是一种平面的关系,而没有层级关系。资源存在的目的是为动作去服务,资源之间没有层也没有级的概念,资源可以同另一个资源有关系也可以依赖别的资源,但是这些关系仅是为了完成这个动作而存在。
类和对象虽然可以让我们去描述这个世界的组成,可是类和对象不能让我们去很好的描述一个事物流程,在编写轻量级的应用时,如同现实世界中我们希望从某一个地方到达20公里外的另一地方一样,我们并没有必要为此去研究汽车的各种组成、研究发动机原理、研究圆周率,研究铺路等等这一切世界的物质构成,我们仅仅是需要去那一个20公里外的地方,您所做的只是需要抬手去打一辆车,并且告诉司机您想去的地方。汽车、自行车、飞机、公路、发动机等等这一切对于您仅是一种资源,他们仅是为您而存在。您所要做的仅是去使用他们。
出租车和其他我们常见的东西,如浴缸,这些已存在的对象我们没必要再去定义一次,就如同现实里您想去某个地方时您会去打一辆出租车,而不是坐进一个浴缸里,在这我们已经没必要再用对象和类的方式来区别出租车和浴缸,他们有他们固然存在的对象构成方式,那是科学家或是工程师才有必要去考虑的,而在您使用他们的时候出租车就是出租车,浴缸就是浴缸。世界是由对象来组成,而动作才是去驱动这个世界运转的。
NoahWeb中的动作
稍稍了解历史的人都知道,金字塔是世界奇迹之一。除了外形之谜,建造之谜以外,很奇怪的是,整座金字塔虽然使用石块垒起,但每块石头之间却没有丝毫的粘结物质。换句话说,如果你从塔顶上将石头一块一块往下搬,从理论上讲就可以把整座金字塔拆了。
从这个意义上说,NoahWeb中的“动作”概念很像是金字塔的石块,每个“动作”就是一块石头,而整个应用就是整座金字塔。尽管每块石头紧紧相连,但它们之间从始至终却不存在任何必然的联系。一旦遇到必须的改动,比如需求变更的时候,由于这个特性,你可以任意“搬动”或是“改动”任意一块“石头”而无需考虑其他“石头”。
反观现代的一座座琼楼玉宇,很漂亮很实用,但是由于种种原因,在盖楼的时候,每块砖之间却使用了砂浆之类的粘结物质,目的很简单,只有这样楼才不会塌。
真巧!这和面相对象编程中的类,对象的概念很像。如果说每一块砖就是一个类或是一个对象的话,那么整座大楼也就是整个应用。而类或对象之间的关系恰恰就是粘结它们所使用的砂浆。没有“砂浆”,类或对象之间就不能发生关系,整个应用也就无从谈起了。现在,楼盖起来了,关系形成了,一切都没问题了吗?如果这个时候需求变更了呢?已经“粘”在一起“砖”你能轻松地再把它们分开吗?难道……要把“楼”“炸了”重新“盖”吗?……
NoahWeb中的动作使用一个被预先约定好的环境变量名”action”,无论使用HTTP传输协议中的GET或POST方式对这个变量赋值都可以激发对应的动作。以动作为中心,可控制与调用其他相关的资源,NoahWeb中可用的资源被分为数据库操作、表单、字符、模组四大类。资源基本采用XML方式进行存放甚至描述。可通过使用NoahWeb中结构化的逻辑层(XML方式)来控制对资源的调用。而资源的显示效果则可以通过NoahWeb表现层轻易控制。这样开发出来的项目,资源的分布成平行,而程序逻辑又成线性,其中资源与资源,资源与动作或动作与动作之间完全呈现松偶合状.
这对项目开发中必然会产生的需求变更后的变更灵活性和响应速度带来必要的支持,需求变动后仅需要变更相对应的动作。由于是采用资源松偶合下的动作来进行编程,所以在开发中一个动作的错误和问题并不会影响整个系统的开发进度甚至后期用户对整个系统的使用,有问题的动作仅会影响前后相应动作,不至于使得整个系统瘫痪。
有时候我们也会需要将一个完整的系统拆分成多个小型系统,或将多个小型系统合并成一个大型系统。这时候动作也会带给我们很多便利.
动作还有一个好处就是使得我们通过以现实世界中描述流程的方式来进行系统设计,可用通过分析需求后的用例图同时得到流程和系统结构设计,缩短系统设计时间.
上述仅仅是对动作编程的一个简单介绍,去学习和了解她将会带给您更多的体验与感想。等待着您进入动作带给我们的崭新的编程世界,让我们一起用我们的动作驱动未来。
分享到:
相关推荐
### 面向切面编程(AOP) 面向切面编程(Aspect-Oriented Programming,简称AOP)是一种编程范式,它旨在提高模块化程度,通过将横切关注点(cross-cutting concerns)从业务逻辑中分离出来,使得代码更加清晰、...
C#是一种面向对象的编程语言,由微软公司设计,用于开发Windows平台下的应用程序。C#具有类型安全性和垃圾回收功能,能够避免许多常见的编程错误。 ##### 2. 编译过程 C#源代码首先经过编译器转换成中间语言(IL),...
《jsp web编程指南》是一本面向web开发初学者的经典教程,涵盖了使用Java Server Pages (JSP) 技术进行Web应用程序开发的核心概念和技术。JSP是Java平台上的一个标准组件,用于创建动态网页,它结合了HTML、CSS、...
6. **Spring框架**:Spring是一个全面的Java企业级应用开发框架,提供了依赖注入、面向切面编程、事务管理等功能,同时包含Spring MVC模块,用于Web开发。 7. **Struts框架**:Apache Struts是一个基于MVC模式的...
### JavaScript面向对象编程知识点 #### 一、现代JavaScript编程概览 现代JavaScript经历了从一个简单的脚本语言到一个成熟、广泛应用于构建复杂应用的强大编程语言的转变。这门语言不仅适用于网页开发,还广泛用于...
考虑到给定的信息,我们将不包含重复的“每日书籍更新收藏必备***”这一部分内容,我们将专注于阐述“Java网编程原理与JSP.Web开发核心技术”这一主题的知识点。 首先,“Java网编程原理”涉及的是一系列基于Java...
C#是一种现代、面向对象的编程语言,特别适合用于Windows和Web开发。 实验五的核心知识点主要包括以下几个方面: 1. **ASP.NET架构**:ASP.NET基于.NET Framework,提供了一系列控件、服务和工具,简化了Web应用的...
- Spring是一个全面的Java开发框架,包含IoC(控制反转)、AOP(面向切面编程)、MVC、数据访问等模块,极大地简化了Java Web应用的开发。 10. **Hibernate和MyBatis**: - Hibernate是ORM(对象关系映射)框架,...
ASP.NET MVC 4 是微软开发的一个用于构建可测试和可维护的Web应用程序的框架,它融合了模型-视图-控制器(MVC)设计模式、ASP.NET Web Forms以及Web编程范式。本教程将深入探讨ASP.NET MVC 4的关键概念和技术,帮助...
ASP.NET Web服务高级编程是微软开发的一种用于构建可互操作的、基于标准的Web服务的技术。Web服务允许不同系统间的应用程序通过互联网进行通信,不受操作系统或编程语言的限制。本教程将深入探讨ASP.NET框架下如何...
Spring的核心是依赖注入(DI)和面向切面编程(AOP)。DI允许对象之间松耦合,而AOP则方便进行横切关注点的处理,如日志、事务管理。Spring MVC是Spring框架的一部分,用于构建Web应用程序。 3. **Hibernate**: ...
它不仅支持面向对象的编程方式,还拥有强大的数据库访问功能以及网络通信能力。虽然近年来Web开发领域更多地转向了JavaScript等语言,但在特定的应用场景下,使用VB进行Web动画的设计依然有其独特的优势。 #### 2. ...
7. **开发语言**: Java作为一种多用途、面向对象的编程语言,因其“一次编写,到处运行”的特性,在Web开发领域有着广泛应用。此外,前端开发还会涉及到JavaScript、TypeScript等语言。 在"新建文件夹"中,可能包含...
拦截器(Interceptor)是Struts2框架的一个核心特性,它基于AOP(面向切面编程)理念,实现了在业务逻辑执行前后插入自定义的操作。本篇文章将深入探讨Struts2的拦截器机制及其应用。 **1. AOP(面向切面编程)** ...
"CodeExamples-Chapter_10"可能包含了第十章关于授权和身份验证的示例代码,这是安全编程的重要部分。开发者可能学习如何设置角色基础的权限控制,或者实现基于HTTP的认证机制,例如 Forms Authentication 或 ...
8. **Spring框架**:Spring是Java Web开发中广泛使用的框架,提供依赖注入、AOP(面向切面编程)、MVC框架和数据访问支持。 9. **Ajax**:Asynchronous JavaScript and XML技术增强了Web应用的用户体验,允许不刷新...
Python是一种解释型、面向对象的编程语言,以其简洁的语法和丰富的生态系统受到欢迎,广泛应用于数据科学、Web开发和自动化任务。 这些编程语言各具特色,满足不同场景的需求,学习和理解它们有助于提升编程技能和...
1. **C#语言基础**:C#是微软开发的一种面向对象的编程语言,具有类型安全、垃圾回收等特点,适用于开发Windows桌面应用、Web应用、移动应用等。在Web开发中,C#用于编写服务器端的逻辑代码。 2. **ASP.NET Web应用...
书中会详细讲解ActionScript 3.0语法,包括变量、数据类型、流程控制语句、函数等基础知识,以及面向对象编程的基本概念。 3. **游戏元素创建**:学习如何创建和操作游戏中的基本元素,如角色、道具、背景等。这...