j2ee课程设计项目开发指导——第3章达到高内聚低藕合的架构设计目标第2部分内容摘要:

成审计日志,但是它不支持跨数据库平台的 功能 要求,所以一般采用 Hibernate 框架中的监听器实现这样的功能。 基于 面向 切 面 思想 的 系统 架构设计 实现 交易日志 示例 面向对象设计中的“开 闭”( OCP, OpenClose Principle)原则 随着软件系统的规模不断地增大,从而对软件系统的维护和修改带来 一定 的复杂性,这种困境促使 Bertrand Meyer 在 1998 年提出了“开 放 — 封闭”原则。 该原则要求 软件系统的开发人员可以在不修改系统中现有的功能代码的前提下(不必改动源代码或者二进制代码、模块的二进制可执行版本,无论是可链接的库、 DLL 或者 Java 的 .jar 文件,都无需要改动),而实现对应用系统的软件功能进行 功能 扩展。 基于面向切面思想的系统架构设计实现能够更好地满足“开 闭”原则 AOP 的本质其实是实现分散关注的编程方法 —— 所谓的分离关注就是要将应用系统中某一通用的需求功能从不相关的各个模块中分离出来,同时也能够使得其他的功能模块共享这个通用的功能实现代码。 由于 AOP 也同 样倡导“封装”和“分离”,因此基于面向切面思想的系统架构设计实现结果的可扩展性高。 基于面向切面思想的系统架构设计实现能够更好地满足“开 闭”原则,因为 AOP 技术的具体实现手段是应用拦截器组件 、并且各个 拦截器组件 可以相互串接组合成为更复杂功能的组件。 当应用系统的需求发生变化,可以通过替换原有的拦截器组件或者添加新的拦截器组件的方式适应需求的变化。 在 银行账 户 信息 管理系统中 基于面向切面思想 设计和实现交易日志示例 ( 1)系统需要提供对业务交易日志记录的功能 银行账户是开展各项金融业务的基础,是一切金融交易的 门槛,不论什么样的金融交易,只要通过银行,都表现为资金从一个账户到另一个账户的转移,都会在账户记录中留下痕迹。 读者对金融行业中的日志记录的重要性也应该有所了解,通过采用交易日志机制等,加强内部制约和监督、审计,提高了银行业务数据的安全性。 为了事后的业务审计和跟踪,有必要对每次的账户变化的情况进行详细的记录,也就是需要对业务交易的过程和结果进行日志记录。 但对账户信息跟踪的技术实现本质是监控对数据库系统的访问,也就是对数据库表中的记录的增、删、改和查等方面的功能操作。 杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料 杨教授工作室,版权所有,盗版必究 , 8/17 页 ( 2)业务交易日志记录的数据格 式 为了能够准确地反映每次的账户信息的变化状况,初步规定业务交易日志记录的数据格式为下面的各个属性字段:交易时间、访问者的 IP 地址、操作员的工号 ID、操作结果的状态(成功或者失败)、操作动作(增加、修改还是删除)、交易类型(存钱、取钱还是转账)、失败原因说明、具体交易的各种业务数据。 ( 3)将业务交易日志记录的功能单独设计为一个模块 为了避免在各个业务功能模块中直接藕合和重复地编程实现业务交易日志记录的功能代码,在系统的架构设计方面应用 面向切面思想 ,业务交易日志记录的功能单独设计为一个模块 —— 交 易日志记录 拦截器组件。 当某个业务功能类的具体业务方法执行后,通过 AOP 所倡导的后置形式的交易日志记录 拦截器组件 实现 在交易操作成功或者失败时都进行记录。 交易日志的记录行为主要是依据被拦截的业务对象中的特定的业务处理方法和有关的交易数据。 在执行业务对象中的特定业务处理方法体后,识别业务方法的操作结果的状态(成功或者失败)。 如果交易成功执行后,则记录交易成功有关的日志信息;如果交易执行过程中抛出异常,则记录交易失败有关的日志信息。 基于 面向 切 面 思想 的 系统 架构设计 实现事务控制示例 事务控制技术能够保证数 据访问的一致性 在 企业应用系统的开发实现 中,单用户操作的 应用 系统越来越少了,基本上都是多用户 并发 操作 和 并发访问数据库 表中的数据。 在这种情况下,要想保证业务的正常进行,保证数据库 访问中 的 各种业务数据的 一致性是关键。 比如 在 银行 账户系统 的转账 功能实现中 , 如果技术实现不合理将 会造成一个 储 户 账号中 的资金减少了, 而 另一个 储 户 账号中 的资金却没有增加。 保证数据库 表中的数据 一致性需要对多 储 户并发访问数据库进行合理的调度 和控制 ,调度 和控制 的基本单位是 应用 事务控制技术。 下图 为保证转账功能的正确性的 事务 控制技术的图示。 杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料 杨教授工作室,版权所有,盗版必究 , 9/17 页 图 为保证转账功能的正确性的事务控制技术的图示 由于 事务是 储 户对 账户 数据库 表中的数据访问 操作 的 序列 集 , 并且 事务具有 ACID 四个方面的特性(分别代表不可分割性 Atomicity、一致性 Consistency、隔离性 Isolation 和稳定性 Durability)。 因此,合理地应用 事务 控制技术能够保证业务处理过程中的数据一致性和业务逻辑的正确性。 JDBC API中也提供对事务控制技术的支持 与通过 某种特定的 数据库 系统中的 存储过程实现事务处理 控制 相比, JDBC 事务处理 技术 可实现 应用 系统与 物理 数据库 系统的 分离,增强 应用 系统的独立性。 在 基于 JDBC 的应用开发 中,事务的启动是 由 JDBC 驱动 程序 自动完成的,而事务的终止则可以是自动 完成也可以是 由开发人员在代码中 手动 实现。 事务 到底是 自动终止还是手动终止 这要取决于数据库 连接对象 中 的自动提交状态的 值是为 true 还是为 false。 JDBC 中的事务特点 主要体现在: 打开一个 数据库 连接对象 ( Connection) 时,缺省是自动提交( AutoCommit) 模式。 也就是说,一条对数据库的更新 SQL 语句代表一项事务操作,操作成功后,数据库系统将自动调用 mit()来提交 ,否则将调用 rollback()来回滚。 因此, 为了能将多个 SQL 语句组合成一个事务, 需要 将 自动提交( AutoCommit) 模式 屏蔽掉。 但 JDBC API 只支持本地 事务 ( (Local transaction)) —— 针对单个数据库为目标的操作 ,而不支持分布式 事务 处理的要求 —— 此时应该要采用 Java 事务 API ( JTA, Java Transaction API)。 杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料 杨教授工作室,版权所有,盗版必究 , 10/17 页 基于 JDBC API事务控制实现的代码示例 在基于 JDBC API 的 事务控制实现 的开发 中,可以通过调用 Connection 类中的setAutoCommit(false)来禁止自动提交 ; 之后就可以把多个数据库操作的 SQL 语句 作为一个事务,在 数据库访问 操作完成后 再 调用 mit()方法 来进行整体 的 提交,倘若其中一个 SQL语句 操作失败,都不会执行 mit()方法 ,并且将产生响应的异常;此时就可以在异常捕。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。