Ein .Net-Aspektweber, der die Implementierung von Beziehungsaspekten unterstützt

StackOverflow https://stackoverflow.com/questions/1306745

  •  19-09-2019
  •  | 
  •  

Frage

Mit in AspectJ implementierten Beziehungsaspekten kann ich Objekte zweier Typen auf folgende Weise verknüpfen (siehe Codebeispiel unten).Dieses Konzept möchte ich gerne auf .net übertragen. Können Sie mir eine .net-Weber-Implementierung nennen, mit der ich dies oder etwas Ähnliches tun kann?

Beziehungsaspekte werden von Pearce & Noble entworfen.Lesen Sie hier mehr zum Konzept und zur Umsetzung: http://homepages.ecs.vuw.ac.nz/~djp/RAL/index.html

Ich bin ziemlich neu bei AOP und meine begrenzten Kenntnisse stammen aus dem Herumspielen mit AspectJ.Ich habe festgestellt, dass das Design von den Fähigkeiten von AspectJ profitiert, Intertyp-Deklarationen und generische Typen zu unterstützen sowie Webregeln und Ratschläge innerhalb der Einheit eines „Aspekts“ zu gruppieren.

Ein Beispiel für die Verknüpfung von Student- und Course-Objekten mithilfe eines (vereinfacht) Beziehungsaspekt:

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();
    }
}
War es hilfreich?

Lösung

Ich kenne mich mit Beziehungsaspekten nicht aus, aber haben Sie sich das angeschaut? PostSharp?Es ist der Spitzenreiter unter den Aspect Weavern für .NET.Ich vermute, dass sie Beziehungsaspekte unterstützen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top