三 层( 多 层)
应 用 程 序 的 开 发

解 皎 虹

返回


三 层( 多 层) 应 用 程 序 的 优 越 性

 

---- 两 层 应 用 程 序 就 是 早 期 的C/S 结 构 应 用 程 序 模 型, 它 主 要 由Client 端 和 数 据 库Server 端 组 成。 它 的 伸 缩 性 不 够 好, 开 发 人 员 写 出 的 程 序 在 客 户 端 运 行, 占 用 了 大 量 的 系 统 资 源 和 网 络 资 源。 随 着 应 用 程 序 业 务 逻 辑 及 复 杂 性 的 不 断 增 大, 其 开 发 工 作 的 难 度 也 越 来 越 高。

---- 目 前, 多 层 应 用 程 序 已 成 为 主 流。 它 能 够 满 足 应 用 程 序 的 两 种 需 求, 即 可 伸 缩 性( 或 可 扩 展 性) 和 Internet/Intranet 应 用。 三 层( 多 层) 结 构 的 应 用 程 序 把 业 务 逻 辑 独 立 出 来, 组 成 一 层 或 多 层, 这 样 就 形 成 了 客 户 端 的 客 户 界 面 层、 中 间 业 务 逻 辑 层( 可 细 化 为 多 层) 和 后 端 数 据 库 服 务 器 层。 这 样 做 的 好 处 是:

----(1) 客 户 端 人 机 界 面 部 分 的 程 序 开 发 工 作 得 以 简 化。 它 不 必 关 心 业 务 逻 辑 是 如 何 访 问 数 据 库 的, 只 需 把 精 力 集 中 在 人 机 界 面 上 即 可。

----(2) 中 间 业 务 逻 辑 层 包 含 了 大 量 的 供 客 户 端 程 序 调 用 的 业 务 逻 辑 规 则, 以 帮 助 其 完 成 业 务 操 作。 它 的 优 点 就 在 于 它 所 具 有 的 可 伸 缩 性, 可 使 其 随 具 体 业 务 的 变 化 而 改 变, 但 在 客 户 层 和 数 据 服 务 层 所 做 的 改 动 较 小, 适 合 于 快 速 开 发。

----(3) 数 据 服 务 层 主 要 提 供 对 数 据 库 进 行 各 种 操 作 的 方 法。 它 主 要 由 中 间 业 务 层 来 调 用 并 完 成 业 务 逻 辑, 当 数 据 库 的 结 构 确 定 后, 对 于 它 的 改 动 也 就 比 较 小 了。

----(4) 系 统 的 安 全 性 得 以 提 高。 它 可 以 对 每 个 业 务 功 能 组 件 进 行 授 权, 限 制 了 非 法 访 问。

----(5) 便 于 进 行 事 务 管 理( 可 使 用Microsoft Transaction Server 或 其 他 类 似 的 产 品 来 实 现)。

---- 三 层 应 用 的 结 构 如 图1 所 示。

---- 注 意: 图1 中 层 次 的 划 分 并 不 是 物 理 上 的 划 分, 而 是 结 构 逻 辑 上 的 划 分。 比 如, 客 户 端 程 序 要 调 用 的 某 个 业 务 功 能 组 件 要 求 响 应 速 度 很 快, 并 且 体 积 较 小, 那 么 就 可 以 把 这 个 业 务 组 件 配 置 在 客 户 端, 以DLL 的 形 式 存 在; 又 如, 客 户 要 访 问 的 某 个 业 务 组 件 包 含 大 量 对 数 据 库 的 操 作( 类 似 于 数 据 库 服 务 器 中 的 存 储 过 程 所 做 的 工 作), 那 么 可 以 把 它 配 置 在 数 据 库 服 务 器 上, 以 减 少 网 络 负 载, 提 高 运 算 速 度; 如 果 某 些 业 务 组 件 中 包 装 的 业 务 逻 辑 需 要 大 多 数 客 户 机 程 序 访 问, 那 么 就 可 以 单 独 构 建 一 台 独 立 的 服 务 器, 将 这 些 组 件 放 在 其 中, 供 客 户 机 程 序 访 问, 而 不 必 在 每 台 客 户 机 上 安 装。

---- 三 层 结 构 的 优 点 是 显 而 易 见 的, 然 而 要 实 现 它 就 需 要 使 用 当 前 流 行 的 组 件 技 术。 基 于Windows 平 台 的 程 序 开 发, 就 会 用 到Microsoft 的DCOM 结 构 模 型 和Active X 组 件 技 术。 如 果 客 户 要 做 跨 平 台 的 开 发, 如 包 括Unix 和Windows 两 种 平 台 的 程 序 开 发, 就 需 要 使 用CORBA 结 构 模 型。

---- 但 是, 任 何 事 务 都 有 两 面 性, 对 于 三 层 应 用 程 序 也 是 一 样。 在 开 发 三 层 应 用 程 序 时 会 遇 到 一 些 不 可 避 免 的 困 难, 它 们 是:

----(1) 延 长 了 开 发 周 期。 因 为 开 发 三 层 应 用 程 序 所 做 的 工 作 要 比 开 发 二 层 应 用 程 序 多 一 些。 根 据 经 验, 花 在 底 部 组 件 上 的 开 发 时 间 要 占 整 个 项 目 开 发 时 间 的30 % ~40 %。

----(2) 增 加 了 开 发 任 务 的 复 杂 性。 除 了 开 发 应 用 程 序 的 核 心 业 务 之 外, 开 发 人 员 还 应 考 虑 应 用 程 序 的 性 能、 安 全 性、 伸 缩 性、 可 靠 性 和 可 恢 复 能 力。 这 些 都 要 求 开 发 人 员 对 操 作 系 统 和 网 络 有 更 深 层 次 的 了 解。

----(3) 提 高 了 对 开 发 人 员 的 素 质 要 求。 两 层 应 用 程 序 的 开 发 人 员 只 要 把 注 意 力 集 中 在 业 务 规 则 的 实 现 和 开 发 工 具 的 熟 练 使 用 上 即 可, 而 三 层 应 用 程 序 的 开 发 则 需 要 开 发 人 员 通 过 培 训 等 手 段 来 提 高 他 们 在 各 方 面 的 技 术 水 平, 其 中 包 括 操 作 系 统、 网 络、 更 先 进 的 开 发 技 术、 更 先 进 的 开 发 工 具, 以 及 许 多 非 计 算 机 技 术。 以 上 这 些 都 需 要 长 时 间 的 学 习 和 经 验 积 累。

----(4) 增 加 了 对 应 用 程 序 的 维 护 工 作 量。 由 于 应 用 系 统 配 置、 网 络 结 构 和 业 务 规 则 的 不 断 变 化, 需 要 开 发 小 组 的 全 体 成 员 来 共 同 维 护, 如 修 改 业 务 组 件、 数 据 库 组 件 等, 以 适 应 以 上 这 些 变 化。

----(5) 增 加 了 实 现 共 享 的 难 度。 开 发 一 个 成 功 的 多 层 应 用 程 序, 很 重 要 的 工 作 在 于 程 序 系 统 结 构 的 设 计( 即 根 据 业 务 规 则 合 理 划 分 组 件)。 其 中 的 大 多 数 组 件 是 针 对 具 体 项 目 而 设 计 的, 这 就 不 利 于 在 不 同 项 目 中 共 享 程 序 代 码。

---- 虽 然 开 发 多 层 应 用 程 序 有 优 点 也 有 缺 点, 但 是 它 的 出 现 代 表 了 应 用 的 需 要, 是 技 术 进 步 的 结 果, 是 符 合 时 代 潮 流 的。

使 用 工 具 开 发
三 层( 多 层) 应 用 程 序

 

----Microsoft Visual Studio 6.0 开 发 工 具 套 件 非 常 适 合 于 开 发 三 层( 多 层) 应 用 程 序。 其 中 最 简 单 的 就 是 使 用Visual Basic 6.0 来 进 行 各 层 组 件 的 开 发。 在 这 个 解 决 方 案 中, 我 们 可 以 采 用VB 6.0 方 便 地 开 发 客 户 端 的 用 户 界 面, 并 在 服 务 器 端 采 用 从 桌 面 的 Access 数 据 库 到Microsoft SQL Server 或Oracle 大 型 数 据 库 平 台 等 各 种 数 据 库 产 品, 在 中 间 层 使 用VB 6.0 简 单 快 速 地 制 作 大 量 包 装 应 用 程 序 业 务 逻 辑 的 组 件( 可 以 灵 活 地 使 用Active X DLL、Active X EXE 和 Active X 文 档 等 多 种 组 件 形 式, 以 适 应 不 同 的 实 际 需 要)。 当 然, 对 于 某 些 要 求 高 性 能 的 组 件 部 分( 整 个 组 件 或 一 个 组 件 的 一 部 分), 可 以 使 用C + + 开 发 工 具( 如 用Visual C + + 或C + + Builder) 来 制 作。 而 对 于 多 层 的Internet/Intranet 程 序 开 发 与 之 略 有 区 别: 在 客 户 端 几 乎 不 必 做 任 何 开 发 工 作, 只 需 使 用 浏 览 器 程 序 即 可; 大 部 分 工 作 集 中 在 中 间 业 务 逻 辑 层 和 后 端 数 据 库 层, 这 里 是 组 件 大 显 身 手 的 天 地, 使 用JavaScript、VBScript、ASP、IIS、DHTML 等 多 种 新 技 术, 结 合Active X 组 件, 就 可 以 构 建 成 为 功 能 强 大 的Web 数 据 库 平 台。

---- 三 层( 多 层) 应 用 程 序 中 所 需 的 各 种 组 件 会 有 很 多, 它 们 之 间 的 逻 辑 关 系 也 很 复 杂。 用 户 所 做 的 依 次 操 作 会 需 要 多 个 处 在 不 同 层 次 的 组 件 按 照 它 们 之 间 的 逻 辑 顺 序 执 行 才 能 实 现, 要 想 对 这 个 过 程 进 行 完 善 的 控 制 是 非 常 困 难 的。 为 此, 微 软 提 供 了Microsoft Transaction Server 来 管 理 多 层 应 用 程 序 中 的 大 量 组 件, 实 现 了 类 似 于 数 据 库 中 的 事 务 处 理, 可 以 提 交 或 回 滚 业 务 对 象 的 各 种 操 作, 从 而 可 以 开 发 出 更 方 便、 更 强 大、 更 健 壮 的 多 层 应 用 程 序。

实 例

 

---- 下 面 以 一 个 简 单 的 分 类 广 告 管 理 程 序 为 例 来 说 明 多 层 应 用 程 序 的 开 发 情 况。 此 例 有 两 种 实 现 方 式, 一 种 是 使 用 一 般 的Windows 客 户 程 序 工 作; 另 一 种 是 使 用Internet 浏 览 器 来 进 行 操 作。 这 里 着 重 介 绍Windows 客 户 方 式 的 具 体 实 现 方 法。

----1. 开 发 工 具 和 环 境

---- 我 们 的 开 发 工 具 和 环 境 是:Microsoft Visual Basic、Microsoft Transaction Server(MTS)、Microsoft Access。

----2. 数 据 库 结 构

----3. 组 件 综 述

---- 此 例 中 的 组 件 分 为 两 级, 业 务 组 件 和 数 据 访 问 组 件, 以 实 现 从 逻 辑 上 把 业 务 规 则 和 数 据 访 问 分 开。 当 业 务 规 则 变 化 时, 只 需 调 整 业 务 组 件, 而 不 必 修 改 数 据 访 问 组 件; 反 之 亦 然。

----4. Form 执 行 流 程