第二章 固本清源 ------ Web 开发谈谈
2.1 对象三种不同形态和运作模式
属性 - 行为模式 : 指一个对象同时拥有属性定义和方法定义。绝大多数对象都运作在这种模式上。
属性模式 : 指一个对象只拥有属性定义,铺之以相应的 setter 和 getter 方法。 Java 规范 给这种模式下的对象取了一个统一的名字:JavaBean 。 JavaBean 可以作为数据 的存储模式和数据的传输载体。
行为模式 : 指构成一个对象的主题是一系列方法的定义。运行在这种模式下的对象,我们往往称之为 “无状态对象”,代表对象为 Servlet 对象。
2.1.1 属性对象模式
属性对象模式又称为JavaBean 模式,如PO(Persistent Object ) --- 持久化对象 、 BO (Business Object ) --- 业务对象 、 VO (Value Object ) --- 数据传输对象 、 FormBean --- 页面对象 等,这些只不过是对基本的、运行在JavaBean 模式下对象的有效扩展或增强,也就是说,JavaBean 自身的特性并没有发生改变,只是引入了一些额外的编程元素从而对JavaBean 进行了增强。当一个对象运作在属性对象模式时,其本质是对象的JavaBean 特性。
结论 : JavaBean 对象的产生主要是为了强调对象的内在特性和状态,同时构造一个数据存储和数据传输的载体。
2.1.2 行为对象模式
运行在行为对象模式之下的对象,我们称之为无状态对象。所谓无状态对象实际上就是指对象的方法所表达的行为特性并不依赖于对象的内部属性的状态。
结论 : 对象中的方法定义是进行请求响应的天然载体。
在Java标准中,对Http 请求的响应是通过Servlet标准来实现的,而我们知道,Servlet对象就是一个非常典型的运行在行为模式之上的无状态对象。
2.2 对象关系模型
从属关系 ---- 一个对象在逻辑语义上率属于另外一个对象。
协作关系 ---- 对象之间通过协作来共同表达一个逻辑语义。
2.2.1 从属关系
从属分两种,一是归属,一是继承。
结论 : "归属' 关系在面向对象编程语言中,主要以对象之间互相引用的形式存在;“继承” 关系在面向对象编程语言中,主要以原生态语法的形式获得支持。
2.2.2 协作关系
结论 : 当对象的行为动作需要其它对象的行为动作进行配合时,对象之间就形成了协作关系。
软件大师Martin Fowler 曾经提出,一个对象在绝大多数情况下都不是孤立存在的,它总是需要通过与其它对象的协作来完成其自身的业务逻辑。
2.3 面向对象编程的基本观点
结论 : 每一种对象的构成模型,都有其特定的范围。
结论 : 将对象运作在 “属性 -- 行为 ” 模式上,最符合面向对象编程思想的本意。
当对象运作在 “属性 -- 行为 ” 模式上时,我们能够最大程度地应用各种设计模式,也能够最大程度地发挥对象之间的协作能力。
2.4 框架的本质
结论 : 当我们加载一个JAR包到CLASSPATH时,实际上是获得了JAR中所有对JDK 的额外支持。
我们的程序就像一个金字塔形状。位于最底部的当然是JVM ,提供运行Java程序的基础环境,包括对整个Java程序的编译运行。在这之上的是JDK ,再上去就是JAR层,所有被加载到CLASSPATH中的JAR文件都是搭建在JDK层次上,它们之间可能形成依赖,但不管怎么说, 它们的作用都是提供JDK以外的功能支持。 最后在顶端的才是我们的日常应用程序。
结论 : 框架只是一个JAR包而已,其本质是对JDK的功能扩展。
结论 : 框架是一组程序的集合,包含了一系列的最佳实践,作用是解决莫个领域的问题。
最佳实践 永远不要生搬硬套任何最佳实践,真理之锁永远只为最合适的那把钥匙开启。
最佳实践 始终保证程序的可读性、可维护性和可扩展性。
最佳实践 简单是美
简单但必须可读,简单但必须可扩展。
最佳实践 尽可能使用面向对象的观点进行编程。
最佳实践 减少依赖(消除耦合)。
加入到CLASSPATH 中JAR 越多就意味着程序对外部环境的依赖度越高,对外部环境的依赖度越高,就意味着程序本身越难以脱离特定的外部环境进行单元测试。
2.6 Web开发的基本模式 -- 分层开发MVC模式
三层:表示层(Presentation Layer)、业务层(Business Layer)、持久层(Persistent Layer)。
数据模型 --- Model
对外交互 --- View
程序的执行和控制 --- Control
书本作者 : 陆舟老师。