为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,
这个接口使得这一子系统更加容易使用。
@@@练习示例:
模拟一个代码生成工具,来生成一个三层架构(表现层、逻辑层、数据层)的代码。
@@@不用模式:
coder\ConfigModel.java [描述配置的数据Model]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
package coder;
/**
* 示意配置描述的数据Model,真实的配置数据会很多
*/
public class ConfigModel {
/**
* 是否需要生成表现层,默认是true
*/
private boolean needGenPresentation = true;
/**
* 是否需要生成逻辑层,默认是true
*/
private boolean needGenBusiness = true;
/**
* 是否需要生成DAO层,默认是true
*/
private boolean needGenDAO = true;
public boolean isNeedGenPresentation() {
return needGenPresentation;
}
public void setNeedGenPresentation(boolean needGenPrasentation) {
this.needGenPresentation = needGenPresentation;
}
public boolean isNeedGenBusiness() {
return needGenBusiness;
}
public void setNeedGenBusiness(boolean needGenBusiness) {
this.needGenBusiness = needGenBusiness;
}
public boolean isNeedGenDAO() {
return needGenDAO;
}
public void setNeedGenDAO(boolean needGenDAO) {
this.needGenDAO = needGenDAO;
}
}
coder\ConfigManager.java [配置管理]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
package coder;
/**
* 示意配置管理,就是负责读取配置文件,
* 并把配置文件的内容设置到配置Model中去,是个单例
*/
public class ConfigManager {
private static ConfigManager manager = null;
private static ConfigModel cm = null;
private ConfigManager() {
//
}
public static ConfigManager getInstance() {
if (null == manager){
manager = new ConfigManager();
cm = new ConfigModel();
// 读取配置文件,把值设置到ConfigModel中去,此处省略
}
return manager;
}
/**
* 获取配置的数据
* @return 配置的数据
*/
public ConfigModel getConfigData() {
return cm;
}
}
coder\Presentation.java [生成表现层的模块]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
package coder;
/**
* 示意生成表现层的模块
*/
public class Presentation {
public void generate() {
// 1. 从配置管理里面获取相应的配置信息
ConfigModel cm = ConfigManager.getInstance().getConfigData();
if(cm.isNeedGenPresentation()) {
// 2. 按照要求去生成相应的代码,并保存成文件
System.out.println("正在生成表现层代码文件");
}
}
}
coder\Business.java [生成逻辑层的模块]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
package coder;
/**
* 示意生成逻辑层的模块
*/
public class Business {
public void generate() {
// 1. 从配置管理里面获取相应的配置信息
ConfigModel cm = ConfigManager.getInstance().getConfigData();
if(cm.isNeedGenBusiness()) {
// 2. 按照要求去生成相应的代码,并保存成文件
System.out.println("正在生成逻辑层代码文件");
}
}
}
coder\DAO.java [生成数据层的模块]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
package coder;
/**
* 示意生成数据层的模块
*/
public class DAO {
public void generate() {
// 1. 从配置管理里面获取相应的配置信息
ConfigModel cm = ConfigManager.getInstance().getConfigData();
if(cm.isNeedGenDAO()) {
// 2. 按照要求去生成相应的代码,并保存成文件
System.out.println("正在生成数据层代码文件");
}
}
}
user\Client.java [客户端实现]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
package user;
import coder.Presentation;
import coder.Business;
import coder.DAO;
public class Client {
public static void main(String[] args) {
/*
* 现在没有配置文件,直接使用默认配置,通常情况下,三层都应该生成
* 也就是说客户端必须对这些模块都了解,才能够正确使用它们
*/
new Presentation().generate();
new Business().generate();
new DAO().generate();
}
}
@@@存在问题:
客户端为了使用生成代码的功能,需要与生成代码子系统内部的多个模块交互。违反了LKP。
导致客户端使用代码生成功能时比较复杂,并且,如果其中某个模块发生变化后可能会导致客户端也需要随着其变化。
@@@使用模式:
代码生成模块中,新增一个Facade类,其他不变。
coder\Facade.java [模块的外观]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
package coder;
/**
* 代码生成子系统的外观类
*/
public class Facade {
/**
* 客户端需要的,一个简单的调用代码生成的功能
*/
public void generate() {
new Presentation().generate();
new Business().generate();
new DAO().generate();
}
}
user\Client.java [客户端实现]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
package user;
import coder.Facade;
public class Client {
public static void main(String[] args) {
// 使用Facade
new Facade().generate();
}
}
此时,客户端不再需要知道代码生成模块中的各个子模块,
只
软件测试技术:
1. 软件质量:软件产品满足规定的和隐含的鱼需求能力相关的全部特征和特性。
2. 软件缺陷:是对软件产品预期属性的偏离现象,包括检测缺陷和残留缺陷。
3. 软件测试:单元测试(模块测试)、集成测试、系统测试、确认测试、验收测试。
开发方测试
用户测试
第三方测试
α测试
β测试
独立测试
4. 软件测试模型:V模型、W模型、X模型、H模型。
5. 黑盒测试:边界测试、等价类测试、基于判定表的测试、因果图、正交测试、场景测试。
6. 白盒测试:逻辑覆盖、路径测试、数据流测试、程序插装、域测试、符号测试、程序变异测试。
7. 单元测试:是在软件开发过程中进行的最低级别的测试活动。包括静态代码分析(Static Code Analysis)和动态测试(Dynamic Testing)
8. 动态单元测试需求的一个测试环境。
a. 驱动模块(Driver):相当于测试的主程序
b. 桩模块(Stub):用于代替所测模块调用的子模块。
9. 单元测试的策略和方法:静态测试(审查、走读、评审)、单元结构测试(路径覆盖)、单元功能测试(黑盒测试)。
10. 集成测试:基于功能分解的集成、基于调用图的集成、基于路径的集成。
11. 集成测试的方法和策略:非增量型集成测试、增量型集成测试。
12.
13. 系统测试:系统测试针对的是整个系统,关注的是整个系统的输入和输出,整个系统的稳定性。
14.
15. 另外是基于Web系统的测试:功能测试内容和性能测试内容。
16. 面向对象软件的测试:OOTesting
17.
18. 自动化测试:对代码静态和动态的分析,测试过程的录制和回放,测试脚本技术,自动化比较和虚拟用户技术。
19. 测试工具分类:白盒测试工具,黑盒测试工具,测试管理工具,专业测试工具。
20.
21.
22.
23.
在oracle数据库中,存储用户数据可以使用普通表,分区表,索引表,簇表。
sql 数据库中,存储用户数据可以
DDL:
1 /*
2 建表格式
3 create table [schema.]table_name
4 (
5 column_name datatype [default expr]
6 [,……]
7 );
8
*/
9
10
create
table dept01
11 (
12 dno number(2),
13 name varchar2(10),
14 loc varchar2(20)default
'呼和浩特'
15 );
16
17
18
insert
into dept01(dno,name)
19
values(10,'技术处');
20
21
select
*
from dept01;
22
23
/*
24 增加列: