AOP Aspect Oriented Programming
AOP Aspect Oriented Programming
考虑一个PoS机的销售处理模块 <<interface>> <<interface>> Processsalehandler ProcessReturnHandler +start sale O +startReturn( +enterItem () +finishReturn() +finishSale +modifysale(
问题 • 考虑一个POS机的销售处理模块
如何处理权限问题 在处理一个销售的过程中,收银员可以执行启 动销售等操作( startsale),如果需要修改销售的 内容( change Sale)则需要由管理员执行 如何处理权限问题? 在每段方法的开头加上权限处理的代码? 或者应该将 Process Salehandler分解为两个类?
如何处理权限问题 – 在处理一个销售的过程中,收银员可以执行启 动销售等操作(startSale),如果需要修改销售的 内容(changeSale)则需要由管理员执行。 – 如何处理权限问题? • 在每段方法的开头加上权限处理的代码? • 或者应该将ProcessSaleHandler分解为两个类?
第一种方法 public iSale startSaleo t if (securityManager.isFunction Valid4 CurrentUser/"startSale") return new SaleMemImplO else throw new SecurityViolated Exception( startSale"; 问题 在所有的业务代码中都混杂了权限相关代码 (Code tangling 与权限相关的代码分散在各处( Code scattering)
第一种方法 • 问题: – 在所有的业务代码中都混杂了权限相关代码 (Code tangling) – 与权限相关的代码分散在各处(Code scattering ) public ISale startSale() { if (securityManager.isFunctionValid4CurrentUser("startSale")) return new SaleMemImpl(); else throw new SecurityViolatedException("startSale"); }
第二种方法 <<interface>> <<interface>> CasherHandler Adminhandler + startSale O +modifySale O +enterItem o +finishSale o +startReturn o +finishReturn o 类提供了一种层次化的分类方法,但问题 是,他只能提供一个维度的分类方法
第二种方法 • 类提供了一种层次化的分类方法,但问题 是,他只能提供一个维度的分类方法