2010-07-29 25 views
9

Czy znasz dobrą bibliotekę gości obiektów graficznych Java?Biblioteka obiektów Java graficzna biblioteka odwiedzin

Chcę odwiedzić obiekt i jego podskładniki i wykonać pewne czynności, gdy zostaną spełnione określone warunki.

Przykład użycia:

  • na ogromne wykres obiektu domeny, reset każdego identyfikatora do null
  • na ogromne wykres obiektu domeny wymienić każdy Set z TreeSet przykład zawierający tę samą elementy.

Potrzebuję biblioteki, a nie niestandardowego kodu, ponieważ przechodzenie przez wykres obiektów może być trudne. Musisz zajmować się kolekcjami, tablicami, serwerami proxy i tak dalej ... Myślałem o ponownym wykorzystaniu części XStream, aby to osiągnąć, ale to nie wygląda tak łatwo: gość Xstream jest bardziej zorientowany na transformację obiektu niż samo modyfikowanie obiektu .

+0

+1, ciekawe pytanie! –

Odpowiedz

1

Dlaczego potrzebna jest do tego biblioteka?

Biorąc pod uwagę, że jest to wykres obiektu domeny, dlaczego nie zdefiniować i nie wdrożyć odpowiednich interfejsów, aby umożliwić odwiedzanie obiektów domeny przez różne implementacje odwiedzin? Jedna z implementacji może (jak określasz) zresetować każdy identyfikator do null.

Przykład

najpierw zdefiniować interfejsy, które muszą być wdrożone przez obiekty, które mogą być odwiedzane lub działać jako goście.

public interface Visitable { 
    void visit(Visitor visitor); 
} 

public interface Visitor { 
    void visitDomainObjectA(DomainObjectA obj); 
    void visitDomainObjectB(DomainObjectB obj); 
} 

Teraz należy zdefiniować dwie klasy obiektów domen, z których obie można odwiedzić.

public abstract class DomainObject implements Visitable { 
    private Object id; 

    public Object getId() { return this.id; } 
    public void setId(Object id) { this.id = id; } 
} 

public class DomainObjectA extends DomainObject { 
    public void visit(Visitor visitor) { 
    visitor.visitDomainObjectA(this); 
    } 
} 

public class DomainObjectB extends DomainObject { 
    public void visit(Visitor visitor) { 
    visitor.visitDomainObjectB(this); 
    } 
} 

Teraz określić konkretną realizację Visitor że robi coś pożytecznego:

public class MyVisitor implements Visitor { 
    public void visitDomainObjectA(DomainObjectA doa) { 
    doa.setId(null); 
    } 

    public void visitDomainObjectB(DomainObjectB dob) { 
    doa.setId(UUID.randomUUID()); 
    } 
} 
+0

Poprawiłem moje pytanie dotyczące Twojej właściwej odpowiedzi. Moja domena jest ogromna, a moje wykresy są złożone. Potrzebuję więc czegoś solidnego i już debugowanego i gotowego do użycia. – Guillaume

+0

IMO utrudniłeś zadanie, starając się być generałem uber. Jaki jest sens w bibliotece, która może przemierzać * dowolny * wykres obiektów (przypuszczalnie przez odbicie), a następnie wywoływać * dowolną metodę * na danych obiektach? Skutecznie wyrzucasz wszelkie zabezpieczenia w trybie kompilacji. W końcu można argumentować, że każda aplikacja OO jest po prostu przechodzeniem przez wykres obiektów i wywoływaniem metod na podzbiorze obiektów. – Adamski

+0

Nie chcę być ogólna. Moja domena jest skomplikowana;) A tak na marginesie, jest to, jak działają narzędzia do serializacji, takie jak XStream. I działają dobrze. – Guillaume

1

Jak o etapowy swój obiekt wykresu w formacie XML i korzystania niektóre biblioteki standardowej obsługa XML/manipulacji?

+0

To dobra sugestia, ale chcę tego uniknąć, jeśli to możliwe. Dodałem jeszcze kilka kroków, które chciałbym uniknąć. – Guillaume

+0

Jakie byłyby te kroki? – Jatin

+0

Część "modyfikacja obiektu" prawdopodobnie będzie wymagać wielu niestandardowych kodów ... – Guillaume

1

Może warto wypróbować bazę danych takich jak: Neo4j lub TitanDB. Pozwoli Ci to wpłynąć na odwiedziny, używając zapytań do przekrojowego zestawienia danych i zbadania relacji.

Oba mają rozbudowane interfejsy API Java, które ułatwiają ładowanie danych i wysyłanie zapytań.

2

Tak się złożyło, że zrobiłem coś takiego. Nie jest to właściwie biblioteka, ale może łatwo się rozwinąć.

Ale natknąłem się na to, ponieważ szukałem czegoś lepszego. Nie mogę tego rozdać i zdecydowanie nie jest jeszcze w stanie, w którym bym to zrobił, ale może coś takiego powinno przyjść, aby żyć jako OS?

To, co mam pozwala mi przemierzać i modyfikować bezpieczny obiekt typu wykres, instancję po instancji, opcjonalnie duplikuje go tak, że oryginał pozostaje nietknięty. Java BTW.To, co działa również trochę, to chwytanie relacji na wykresie (krawędzie, jeśli chcesz).

Mogę wyobrazić sobie jasną definicję operacji (takich jak modyfikowanie, rozszerzanie, duplikowanie, zwijanie, przechodzenie) i odpowiednie impe- rementacje. Elementy ortogonalne, takie jak podgramy identyfikacji, zostałyby właściwie uwzględnione.

Każdy zainteresowany takim projektem, proszę o odpowiedź, może uda nam się coś rozpocząć.