Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 什么时候应该将行动分组到同一个方面,什么时候应该创建不同的方面?_Java_Aop - Fatal编程技术网

Java 什么时候应该将行动分组到同一个方面,什么时候应该创建不同的方面?

Java 什么时候应该将行动分组到同一个方面,什么时候应该创建不同的方面?,java,aop,Java,Aop,我目前正在学习面向方面的编程,当我尝试进行一些练习时,我意识到我在同一方面设计了不同的方法,我开始怀疑这是否是最好的方法,或者我是否应该为不同的方法创建不同的方面。 我将尝试更多地解释我所做的: 我有两门课: 计算器类有几种方法,如加法、乘法、求反、重置等 AOPmain类 我创建了另一个类(ReturnMessage类)作为方面,在这个类中,我创建了两个方法-如下面的代码所示)(一个应用于计算器类中的一半方法,第二个应用于同一类中的其他一些方法-计算器)。 我的问题是:在一个方面中编写几个方法

我目前正在学习面向方面的编程,当我尝试进行一些练习时,我意识到我在同一方面设计了不同的方法,我开始怀疑这是否是最好的方法,或者我是否应该为不同的方法创建不同的方面。 我将尝试更多地解释我所做的: 我有两门课:

  • 计算器类有几种方法,如加法、乘法、求反、重置等
  • 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“但是你不同意人们的看法吗?”???