Java 什么时候应该将行动分组到同一个方面,什么时候应该创建不同的方面?
我目前正在学习面向方面的编程,当我尝试进行一些练习时,我意识到我在同一方面设计了不同的方法,我开始怀疑这是否是最好的方法,或者我是否应该为不同的方法创建不同的方面。 我将尝试更多地解释我所做的: 我有两门课:Java 什么时候应该将行动分组到同一个方面,什么时候应该创建不同的方面?,java,aop,Java,Aop,我目前正在学习面向方面的编程,当我尝试进行一些练习时,我意识到我在同一方面设计了不同的方法,我开始怀疑这是否是最好的方法,或者我是否应该为不同的方法创建不同的方面。 我将尝试更多地解释我所做的: 我有两门课: 计算器类有几种方法,如加法、乘法、求反、重置等 AOPmain类 我创建了另一个类(ReturnMessage类)作为方面,在这个类中,我创建了两个方法-如下面的代码所示)(一个应用于计算器类中的一半方法,第二个应用于同一类中的其他一些方法-计算器)。 我的问题是:在一个方面中编写几个方法
@Aspect
public class ReturnMessage {
//the joinPoint is used to get the method names and args.
@Before("execution(public void *(double))")
public void returningMessage( JoinPoint jp) {
String method = jp.getSignature().getName();
double value = (Double) jp.getArgs()[0];
System.out.println("Going to "+method+" "+value);
}
@Before("@annotation(lala)")
public void returnMsg2(MyAnnotation lala) { //<-- should I create another aspect to put this method?
System.out.println(lala.msg());
}
}
@方面
公共类返回消息{
//joinPoint用于获取方法名和参数。
@之前(“执行(公共无效*(双重))”)
公共无效返回消息(JoinPoint jp){
String方法=jp.getSignature().getName();
double value=(double)jp.getArgs()[0];
System.out.println(“转到“+方法+”+值);
}
@在(“@注释(拉拉)”之前
public void returnMsg2(MyAnnotation lala){/我会为我想要跟踪的每个横切关注点创建一个方面。在方面中有多个切入点/方法是可以的
您可以有一个方面负责日志记录,一个方面负责度量等
当我与AoP合作测量现有应用程序的性能时,我发现这个链接非常有用
它在现有的代码基础上讨论方面,但是它可以应用于任何情况
即使方面不是传统的对象,但作为软件组件,方面应该尊重良好设计的原则,包括。我不是AspectJ专家,但我要说的是,在决定是否要向方面添加方法时,高内聚性是最重要的
面向方面的编程已经有可能使执行路径变得更加模糊,所以我不认为将每个方法分离成自己的方面是一个好主意。这将导致许多“都德,我的代码在哪里”的游戏对于在同一个系统中工作的未来开发人员来说。我认为最好将方法组合在一个方面中,这样它们更容易找到。一个方面
也是一个类
,正如其他人回答的那样,它应该包括相关的功能。套用Cygnusx1的话,你不想让一个方面有建议记录以及生成度量
进一步的组织可能需要基于他们所针对的切入点。例如,考虑<代码> Logger-< /Cord>方面生成多个不同的日志,例如简洁和冗长。
在包com.company.project.logging
中创建此方面是有意义的。但是您希望它引用代码中需要建议的所有位置吗?可能不希望
我要做的是创建一个抽象方面并进行扩展,其中包含具体的建议和抽象的命名切入点。然后,我将在实现这些抽象切入点的各种包com.company.project.dataaccess
,com.company.project.purchase
中使用具体方面进行扩展
因此,我所做的是公开了一个方面,该方面可以进行日志记录,并允许各个模块所有者定义何时触发这些事件。我完全搞不清建议哪些类,哪些类是方面“在一个方面中编写多个方法以与其他方法交互”中的“交互”是什么意思。也许你可以用名字来代替一个班级、另一个班级、另一个班级等等。问题通常是“有时”回答的。如果你想知道什么时候做x而不是y,你应该问“我什么时候应该做x而不是y?”答案是什么“什么时候一个人应该把行动分成同一个方面,什么时候应该创造不同的方面?”?“与您当前的问题一样有用吗?是的@MikeSamuel,我将以您的笔记为例。很抱歉我的提问方式,我同意您的看法。SO的质量需要保持高水平,但您不同意人们的看法。@MikeSamuel,我将尝试编辑以使其更为糟糕。”understandable@periback2“但是你不同意人们的看法吗?”???