Библиотека посетителя графа объектов Java

Вы знаете хорошую библиотеку посетителя графа объектов Java?

Я хочу посетить объект и его sub компоненты и выполнить некоторые действия, когда некоторые условия подобраны.

Использование в качестве примера:

  • на огромном графике объекта области, сброс каждый идентификатор к null
  • на огромном графике объекта области замените каждого Set с a TreeSet экземпляр, содержащий те же элементы.

Я хочу библиотеку, не пользовательский код, потому что пересечение Графа объектов может быть хитрым. Необходимо обработать наборы, массивы, прокси, и так далее... Я имею, думают о части повторного использования XStream для достижения этого, но это не выглядит настолько легким: посетитель Xstream более ориентирован на трансформацию объектов, чем объект сам модификация.

10
задан Guillaume 29 July 2010 в 11:38
поделиться

3 ответа

Как насчет преобразования графа объекта в XML и использования какой-нибудь стандартной библиотеки обработки / манипулирования XML?

1
ответ дан 4 December 2019 в 02:49
поделиться

Возможно, стоит попробовать базу данных графов, например Neo4j или TitanDB . Это позволит вам влиять на посещения, используя запросы, чтобы разрезать набор данных и исследовать взаимосвязи.

Оба они имеют обширные API-интерфейсы Java для облегчения загрузки данных и запросов.

1
ответ дан 4 December 2019 в 02:49
поделиться

Зачем вам нужна библиотека для этого?

Учитывая, что вы указали, что это граф объекта домена, почему бы не определить и не реализовать соответствующие интерфейсы, чтобы позволить объектам вашей области быть посещали различные реализации посетителя? Одна из реализаций может (как вы указали) сбрасывать каждый идентификатор на null .

Пример

Сначала определите интерфейсы, которые будут реализованы объектами, которые могут быть посещены или выступать в качестве посетителей.

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

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

Теперь определите два класса объектов предметной области, оба из которых можно посещать.

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

Теперь определите конкретную реализацию посетителя, которая делает что-нибудь полезное:

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

  public void visitDomainObjectB(DomainObjectB dob) {
    doa.setId(UUID.randomUUID());
  }
}
1
ответ дан 4 December 2019 в 02:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: