2023年从面向方面看软件设计_第1页
2023年从面向方面看软件设计_第2页
2023年从面向方面看软件设计_第3页
2023年从面向方面看软件设计_第4页
2023年从面向方面看软件设计_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

从面向方面看软件设计产品小王今日接到了一个新的需求——客户盼望把登录验证时间从12小时调整到24小时。

产品小王接到需求时,心想这不就是把服务器中的数字从12改成24吗?简洁得很,所以为了呈现自己的专业性,他一口答应市场部的同事说今日就可以实现你这个需求;心里还想着用一点小手段就让市场部同事欠自己一个人情,以后找市场部办事便利多了。

于是产品小王便找到研发老王说:能不能帮忙把登录验证时间改成24小时啊,我已经答应市场部了今日实现,没问题吧。

研发老王一听就说这个做不了,你抓紧和研发部同事说下,别耽搁人家事了。

小王一听,急了,赶忙问到为什么啊,不就是改个数字吗?

老王说,可不仅仅是改个数字,我们当时在实现系统的时候,为了快速实现平安的相关功能,所以平安模块是贯穿许多模块的;假如要改这个数字,首先要看在各个模块中关于平安模块的相关代码,然后再查看修改代码产生的影响,最终还要测试数字修改后代码是否能正常运行。

小王心想:为什么改个数字要这么简单啊?

其实这个问题在软件工程中很早就消失了,软件工程中也早就有一个很好的解决方法——面对方面编程(AOSE:Aspect-OrientedSoftwareEngineering),这篇文章就具体绽开说明什么是面对方面编程。

一、面对及面对方面

一般状况下,在软件实现过程中,单个需求需要多个组件实现,而每个组件也可能同时服务于多个需求。

换句话说就是一个组件可以服务多个需求,一个组件中也包含实现多个系统需求的代码;正如在下面这张图片中,平安需求组件和恢复需求组件同时服务于客户需求,账户需求和管理需求,组件之间相互搭配,进而实现系统功能的。

软件系统结构

在图中可以看到,在这个简洁的系统中有三个核心功能组件,分别是客户需求,账户需求和管理需求;同时为了保持这三个核心功能组件能稳定运行,增加了平安需求和恢复需求组件。

在面对方面编程中,核心关注点(Concerns)指系统要实现的主要功能,比如上述图片中的客户需求、账户需求、管理需求;而把服务于核心关注点实现的功能称为横切关注点(CrossCuttingConcerns),比如上述图片中的中的平安需求和恢复需求。

传统的代码实现过程中,核心关注点的实现总是包含额外的代码来实现横切关注点,这就会导致代码混乱和分散;虽然这种程序的实现方式能够提高效率,但是这种结构会导致的横切关注点的组件修改成本,复用成本都特别高。

缘由是需要找出横切关注点与核心关注点组件间如何相互协作,并评估修改后对核心关注点组件的影响,修改完成后,还要全部验证核心关注点的组件。

说到这里,已经说明清晰面对方面编程的起因,接下来将说明什么是方面以及什么是面对方面编程。

方面指的就实现一个功能的程序,与其他程序不同的是,方面更偏向于描述程序间组成方法——一个可执行的方面依据自身的描述去组合对象,方法和其他方面创建处理的,同时规定了程序在什么地方运行。

方面的主要内容包括切入点、程序和连接点:切入点说明商定方面在什么时间开头执行程序;连接点指定系统在执行完程序后连续执行的程序,包括进行方法调用、初始化变量或者更新域,定义引用的大事集合等,如下图所示。

面对方面编程实例

面对方面编程正是基于方面的概念而诞生的,是一种特地实现横向关注点组件的编程思想。

二、分别关注点

面对方面编程的核心内容是分别关注点,是思索和构建软件系统的重要方法。

在面对方面编程中将关注点划分为各自独立的关注点,要求程序中的每个方面(类、方法、过程等)只为实现一个目的,进而降低修改和复用方面的成本,甚至不用思索关注点之间的相互影响。

当用关注点来表示一个需求或者一组需求的时候,我们可以很简单在实现组件中跟踪需求;假如需求发生转变,研发人员可以快速定位到需要需改的代码,并且不需要考虑方面之间的相互影响,快速实现需求转变。

三、实现面对方面编程

在面对方面编程中,关注点是从系统需求中导出的,利用分别关注点的概念作为考虑需求和设计系统的基础;这个是进行软件设计的原则,下文中绽开的软件设计的步骤也是基于此进行描述。

1.明确软件需求

和大部分的软件设计一样,在进行软件设计时要最先明确软件需求,也就是明确软件的主要功能是什么;只有抓住了主要功能,才能保证我们在软件设计过程中不会偏离方向。

2.核心系统设计

明确软件需求后,我们就可以通过软件需求推导出核心关注点和横切关注点。

3.方面识别和设计

通过视点识别方面是一种最常用的方法。如下图所示,每个视点代表一种用户的一组关注点,而每组关注点又可以分为核心关注点系统和横切关注点。

通过视点识别关注点,能很好地保证我们在分析时不重复、不遗漏,尽可能找到全部的关注点。

面对方面的设计和编程

面对方面的设计是利用方面进行系统设计的过程,通过方面来实现那些在需求工程中所找出来的横切关注点,同时将方面与系统的其他组件组合在一起。

4.冲突分析和解决

在将方面和系统的其他组件结合在一起时,要分析并解决可能存在的冲突,保证不发生组合的二义性;在不保证二义性的状况下,要找到每个方面与系统合适的切入点;只有找到了合适的切入点,方面运行才会符合设计者的需求。

需要特殊留意的是,由于方面都是基于对系统肯定的预期而独立设计的,当多个方面一起作用与一个系统,一个方面对系统的影响会导致其他方面运行失败。

5.名字设计

面对设计的最终一步是方面及切入点的名字设计,由于面对方面特别的软件执行挨次,所以在设计面对方面程序时要特殊留意方面和切入点的名字设计,避开方面通过切入点执行程序时调用错误。

6.总结

面对方面编程的流程图如下:

面对方面的设计过程的流程图

四、测试

由于面对方面编程代码的特别结构,测试是具有肯定困难的,主要的缘由是方面的程序与主体代码是紧凑的,而不是松散的;就算测试后在一处能正常工作,在其他环境下也未必能正常工作。

下面绽开说明可能的测试方法和遇到的困难:

1.阅读代码测试

面对方面编程的代码之间通过切入点进行连接,导致代码无法直接阅读;虽然可以借助一些代码阅读工具可以使代码“变平”,从而降低代码的阅读难度,但是面对方面编程的程序语言本身是动态的,而非静态的;所以借助工具阅读代码的只是解决了表面问题,无法解决实际问题。

2.白盒测试

与白盒类似的还有结构化测试,这两种测试方法的共同点是设计能供应肯定程度掩盖的测试方法;比如保证软件的每个执行路径都执行过一遍,每个程序语句都执行过一次。

遇到的问题和阅读代码测试类似,由于面对编程软件通过切入点连接,导致面对方面的程序不是结构化程序;在某些运行环境下,一些方面可能被执行,一些方面不执行;而在另一种运行环境下,方面的执行状况又是另一种状况,方面之间又相互影响;所以产生了浩大的测试地图,大大增加了测试难度。

许多现实世界中的系统都会涉及敏感操作,为了削减敏感操作带来的损失,系统需要在敏感操作之前验证用户身份,并进行相关的记录操作,比如生成日志、发出通知等。

那么这种功能的实现规律是什么呢?这篇文章将以财务系统的数据查看功能为例子说明面对方面编程如何实现用户认证。

财务系统中有许多敏感数据及敏感操作权限,这些数据及操作只能被有相关权限的员工看到及使用。

但是在许多状况下,仅仅靠权限掌握无法达到抱负效果,比如财务人员打开了相关页面并短暂离开座位去完成其他工作,这个时候该页面上的数据和操作没有任何爱护措施。

为了对敏感数据及操作有更好的爱护效果,产品往往会在相关领域增加账号验证——要查看敏感数据或者进行敏感操作需要先验证账号密码;假如密码不匹配,将直接退出系统并记录相关操作信息;假如账号密码正确,则连续操作并记录相关操作信息。

这种功能的实现规律也许有以下两种:

修改每个敏感数据及操作的组件,让组件去调用账号密码验证并生成操作信息;修改系统代码,使得每次进行敏感操作的时候都调用账号密码认证,在认证完成后记录相关信息;以上两种实现规律都不是特别合理的,缘由如下:

第一种规律的问题是会导致验证操作和记录操作绑定在一起,不但造成代码冗余而且会固化代码,降低代码的敏捷性;其次种规律的问题是将代码分散操作,会导致后续修改需求时无法快速定位对应的代码,同时也会固化代码,降低代码的敏捷性;其实不难看出,账号密码验证及操作是属于横切关注点,可以使用面对方面编程实现,详细如下:

切入点:查看敏感数据或者进行敏感操作;切入点程序:进行账号密码验证操作;连接点程序:记录操作的相关信息等;代码结构如下图所示:

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论