AOP@Work: AOP和元数据:完美的匹配,第2部分-用元数据实现多维接口 - 编程入门网
注点的影响。
如果熟悉 AOP,那么您已经知道代码纠结 —— 将多关注点代码混合到一个模 块中 —— 会导致难于理解和难于维护的代码。签名纠结 与此类似。就像在上面 的例子中,当程序元素的名字反映其在多个关注点中的作用时,我们就称之为纠 结的签名。 AOP@Work: AOP和元数据:完美的匹配,第2部分-用元数据实现多维接口(2)时间:2011-09-04 IBM Ramnivas Laddad在签名纠结与意义不明的签名(忽略程序元素的其他功能,并简化上面的方法 名,例如, credit())之间选择时,大多数开发人员会选择简单性。不过,真正 需要的是第三种选择。在元素签名中加入元数据注释(metadata annotation)可 以让您用系统的方式表达非核心功能。 元数据,帮我解脱出来吧! 利用 Java 5.0 中的元数据功能,可以使用有类型的注释通过编程的方式传达 非核心功能。例如,出于安全考虑,需要在事务管理中执行并获得认证的货款方 法可以加上注释,如下所示:
表面上,使用注释与上述签名纠结方法名之间的区别好像并不明显,然而,我 将非核心功能指定从方法名转移到了注释中。这种方法的真正好处是在调用者这 方面,方法的业务客户不需要理解其他关注点。业务客户也不需要在附加到方法 上的注释改变时修改其代码。 除了排除元素签名的纠结外,还可以使用注释来表达与代码的横切关注相关的 任何数据。在这里,注释可以与关注点有关的参数相结合。例如,下面的方法声 明其事务必须具有 Required 语义,并且选中的权限必须是 “accountModification”。
可以看出,对于将横切元素的名字分解为多个部分,使用注释很方便。实际上 ,注释可以在不使名称交织在一起、或者不增加调用者负担的情况下表示程序元 素的非核心功能。 元数据作为一个多维签名 概念上,元数据可以视为额外的维上的值,它使我们可以在多维空间中表示程 序元素的功能。这种理解有助于用系统的方式处理元数据,并使这些数据符合 AOP 的目标。即使对于不使用面向方面方法的开发人员,从多维的角度看待元数 据对设计注释类型也会提供概念上的帮助。 可以将元数据看成以系统性的方式进行多维签名的一种促动因子(enabler) :空间中的每一维都代表一个关注点,每一个注释中的值表示对多维签名空间的 一个投射。考虑刚讨论过的 credit() 方法的签名。图 1 显示在三维签名空间中 的 credit() 方法。 图 1. 使用元数据的多维签名空间 图 1 中操作的名字实质上是一维签名空间中的一个值。这个签名空间中的惟 一的维是业务维,而在这一维中操作的值(也称为这一维中的投射)是“credit ”。使用 Transactional 注释、同时将 value 属性设置为 Required,我就可以 将这个例子发展为两维签名空间。值 Required 是这个方法在新增加的事务管理 维中的名字。 AOP@Work: AOP和元数据:完美的匹配,第2部分-用元数据实现多维接口(3)时间:2011-09-04 IBM Ramnivas Laddad与此类似,现在来考虑一下 Authorized 注释,将 value 属性设置为 “accountModification”。在这个例子中,增加的注释加入了另一维,从而成为 三维签名空间。大多数签名会将重要的值只放入少数维中。这与将两维几何点投 身到三维空间中一样:这种投射的值在其中一维上将为零。 没有注释,元素签名通常会完全忽略非核心维。这种疏忽的主要原因是没有合 适的方法表达它们。新的 Java 元数据功能提供了在每一维中表达程序功能的精 确方式。 将签名空间映射到关注点空间 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |