2009-08-20 80 views
0

在AspectJ中实现的关系方面,我可以通过以下方式关联两种类型的对象(请参见下面的代码示例)。我想将这个概念转移到.net。 你可以指向一个.net编织器的实现,这将允许我做这个或类似的东西吗?.Net方面编织器支持关系方面的实现

关系方面由皮尔斯&贵族设计的。了解更多关于概念和实施在这里:http://homepages.ecs.vuw.ac.nz/~djp/RAL/index.html

林相当新的AOP并从使用AspectJ玩弄得到我有限的知识。我已经发现,AspectJ的支持intertype声明和泛型类型的能力,以及能够在“aspect”的单元中编织规则和建议。

使用(简化)关系方面相关联,学生和课程对象的示例:

public class Course02 { 
    public String title; 
    public Course02(String title) {this.title = title; } 
} 

public class Student02 { 
    public String name; 
    public Student02(String name) {this.name = name; } 
} 

public aspect Attends02 extends SimpleStaticRel02<Student02, Course02> {} 

public abstract aspect SimpleStaticRel02<FROM,TO>{ 

    public static interface Fwd{} 
    public static interface Bwd{} 

    declare parents : FROM implements Fwd; 
    declare parents : TO implements Bwd; 

    final private HashSet Fwd.fwd = new HashSet(); 
    final private HashSet Bwd.bwd = new HashSet(); 

    public boolean add(FROM _f, TO _t) { 
     Fwd f = (Fwd) _f; 
     Bwd t = (Bwd) _t; 

     f.fwd.add(_t); // from adder to i fwd hashset 
     return t.bwd.add(_f); // to adder from i bwd hashset 
    } 

    public void printFwdCount(FROM _f) 
    { 
     Fwd f = (Fwd) _f; 
     System.out.println("Count forward is: " + f.fwd.size()); 
    } 

    public void printBwdCount(TO _t) 
    { 
     Bwd b = (Bwd) _t; 
     System.out.println("Count backward is: " + b.bwd.size()); 
    } 

} 

public class TestDriver { 

    public TestDriver() { 

     Course02 comp205 = new Course02("comp205"); 
     Course02 comp206 = new Course02("comp206"); 
     Student02 Joe = new Student02("Joe"); 
     Student02 Andreas = new Student02("Andreas"); 

     Attends02.aspectOf().add(Joe, comp205); 
     Attends02.aspectOf().add(Joe, comp206); 

     Attends02.aspectOf().printFwdCount(Andreas); 
     Attends02.aspectOf().printFwdCount(Joe); 
     Attends02.aspectOf().printBwdCount(comp206); 
    } 

    public static void main(String[] args) { 
     new TestDriver(); 
    } 
} 

回答

0

我不熟悉的关系方面,但你看PostSharp?它是.NET方面编织者中的第一位。我的猜测是他们支持关系方面。

+0

我已经在PostSharp中快速浏览了一下,但没有透视。在投入大量时间之前,我希望获得专家的建议。 关系方面不是AspectJ的一个特性。它是由Pearce + Noble设计的类库,它利用了AspectJ的AOP特性,主要是类型间声明。 – DerDres 2009-08-20 23:02:31

相关问题