Ткач .Net, поддерживающий реализацию аспекта отношений - PullRequest
0 голосов
/ 20 августа 2009

С аспектами отношений, реализованными в AspectJ, я могу связать объекты двух типов следующим образом (см. Пример кода ниже). Я хотел бы перенести эту концепцию в .net. Можете ли вы указать мне на реализацию .net weaver, которая позволит мне сделать это или что-то подобное?

Аспекты отношений разработаны Pearce & Noble. Узнайте больше о концепции и реализации здесь: http://homepages.ecs.vuw.ac.nz/~djp/RAL/index.html

Я довольно новичок в AOP, и мои ограниченные знания получены от игры с AspectJ. Я определил, что дизайн выигрывает от возможностей AspectJ по поддержке объявлений типов и универсальных типов, а также возможности группировать правила и рекомендации по ткачеству в рамках «аспекта».

Пример связывания объектов Student и Course с использованием ( упрощенного ) аспектного отношения:

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();
    }
}

1 Ответ

0 голосов
/ 20 августа 2009

Я не знаком с аспектами отношений, но вы смотрели на PostSharp ? Это лучшая собака среди сторонников ткачества для .NET. Я думаю, они поддерживают аспекты отношений.

...