10
votes

Java Object Graph Bibliothèque de visiteurs

Connaissez-vous une bonne bibliothèque de visiteur de graphes d'objet Java?

Je veux visiter un objet et ses sous-composants et effectuer des actions lorsque certaines conditions sont assorties.

Exemple d'utilisation:

  • sur un graphique d'objet de domaine énorme, réinitialiser chaque identifiant à null
  • sur un graphe d'objet énorme de domaine, remplacez chaque SET avec un arbreset cas contenant le même éléments.

    Je veux une bibliothèque, pas le code personnalisé car Traverser un graphique d'objet peut être délicat. Vous devez gérer des collections, des tableaux, des proxies, etc. J'ai pensé à la réutilisation de la partie de Xtream pour y parvenir, mais cela n'a pas l'air si facile: le visiteur de Xstream est plus orienté sur la transformation de l'objet que l'auto modification de l'auto.


0 commentaires

5 Réponses :


1
votes

Pourquoi avez-vous besoin d'une bibliothèque pour le faire?

Étant donné que vous spécifiez que ceci est un graphique d'objet de domaine, alors pourquoi ne pas définir et mettre en œuvre des interfaces pertinentes pour permettre à vos objets de domaine à visiter par différentes implémentations de visiteur? Une des implémentations pourrait (comme vous spécifier) ​​réinitialiser chaque ID sur null code>. P>

Exemple fort> p>

Définissez d'abord les interfaces à être mis en œuvre par des objets pouvant être visités ou agir en tant que visiteurs. p> xxx pré>

Définissez maintenant deux classes d'objet de domaine, qui peuvent toutes deux visitées. P>

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

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


3 commentaires

J'ai affiné ma question sur votre réponse pertinente. Mon domaine est énorme et mes graphiques sont des complexes. J'ai donc besoin de quelque chose de robuste et déjà débogué et prêt à être utilisé.


IMO, vous avez rendu le problème délicat en essayant d'être uber-générique. Quel est le point dans une bibliothèque qui peut traverser n'importe quel graphique objet objet (probablement par réflexion), puis appelez n'importe quelle méthode sur des objets donnés? Vous jetez efficacement toute sécurité du type de compilation. Après tout, on pourrait soutenir que toute application OO traverse simplement un graphique d'objet et des méthodes d'appel sur un sous-ensemble des objets.


Je ne veux pas être uber-générique. Mon domaine est uber-compliqué;) Et au fait, ce sont les outils de sérialisation comme Xtream. Et ils fonctionnent bien.



1
votes

Que diriez-vous de marraber votre graphique d'objet dans XML et d'utiliser une bibliothèque de manipulation / manipulation standard de XML?


1 commentaires

C'est une bonne suggestion, mais je veux l'éviter si possible. Il a ajouté des mesures supplémentaires que je souhaite éviter



1
votes

Il peut être utile d'essayer une base de données graphique comme Neo4j ou TITANDB . Cela vous permettra d'affecter les visites en utilisant des requêtes pour couper votre ensemble de données et explorer les relations.

Ces deux présentent des API de Java étendues pour faciliter le chargement et l'interrogation des données.


0 commentaires

2
votes

Comme cela se produit, j'ai fait une telle chose. Pas vraiment une bibliothèque, mais cela pourrait se développer facilement.

Mais je suis tombé sur ceci depuis que je cherchais quelque chose de mieux. Je ne peux pas le donner, et ce n'est certainement pas encore dans un état où je ferais cela, mais peut-être qu'une telle chose devrait venir vivre comme OS?

Qu'est-ce que j'ai me permet de traverser et de modifier un type de graphique d'objet-Safe-Safe-Safe, instance-par exemple, en le dupliquant éventuellement de telle sorte que l'original reste intact. Java Btw. Ce qui fonctionne également un bit consiste à saisir les relations dans le graphique (les bords, si vous le souhaitez).

Ce que je pourrais envisager est une définition claire des opérations (telles que modifier, prolonger, réduire, effondrer, traverser) et implémères respectives. Les aspects orthogonaux tels que IdentifIG Subgraphs seraient correctement pris en compte.

Quelqu'un intéressé par un tel projet s'il vous plaît répondre, peut-être que nous pouvons obtenir quelque chose de démarrer.


0 commentaires

2
votes

Je cherche la même chose et j'ai trouvé cela.

http://code.google.com/p/beehaïm/


0 commentaires