Question

Au fil des ans, je pense avoir vu et essayé tous les moyens imaginables de générer des structures de données de stub (fausses données) pour des graphes d'objets complexes. Java est toujours poilu.

   *    *    *    *
A---B----C----D----E

(Pardon pas cher UML)

Le problème clé est qu’il existe certaines relations entre les valeurs. Ainsi, une instance donnée de C peut impliquer des valeurs données pour E.

Toutes les tentatives que j'ai vues d'appliquer un seul modèle ou groupe de modèles pour résoudre ce problème en Java finissent par être compliquées.

Je suis en train d’examiner si des langages groovy ou l’un des langages vm dynamiques peuvent faire un meilleur travail. Il devrait être possible de faire les choses beaucoup plus simplement avec les fermetures.

Quelqu'un a-t-il des références / des exemples de ce problème résolu bien avec (de préférence) groovy ou scala?

Modifier: Je ne savais pas " Object Mother " C’était le nom du motif, mais c’est celui qui me pose problème: lorsque la structure d’objet devant être générée par la mère d’objet est suffisamment complexe, vous obtenez toujours une structure interne assez complexe à l’intérieur de la mère d’objet elle-même. (ou en composant plusieurs mères d'objet). Avec une structure cible suffisamment large (Disons 30 classes), il est très difficile de trouver des moyens structurés de mettre en œuvre la ou les mères objets. Maintenant que je connais le nom du motif, je peux mieux le trouver sur Google;)

Était-ce utile?

La solution

Le modèle Mère d'objet peut être utile. Je l'ai utilisé dans mon projet Groovy / Grails actuel pour m'aider à créer des exemples de données.

Ce n’est pas très spécifique, mais un langage dynamique peut souvent faciliter la création de quelque chose comme celle-ci à l’aide de la frappe et des fermetures de canards.

Autres conseils

Je crée généralement des mères d’objet à l’aide du modèle de générateur.

public class ItineraryObjectMother
{
    Status status;
    private long departureTime;

    public ItineraryObjectMother()
    {
        status = new Status("BLAH");
        departureTime = 123456L;
    }
    public Itinerary build()
    {
        Itinerary itinerary = new Itinerary(status);
        itinerary.setDepartureTime(departureTime);
        return itinerary;
    }
    public ItineraryObjectMother status(Status status)
    {
        this.status = status;
        return this;
    }
    public ItineraryObjectMother departs(long departureTime)
    {
        this.departureTime = departureTime;
        return this;
    }

}

Ensuite, il peut être utilisé comme ceci:

Itinerary i1 = new ItineraryObjectMother().departs(1234L).status(someStatus).build();
Itinerary i2 = new ItineraryObjectMother().departs(1234L).build();

Comme Ted l’a dit, cela peut être amélioré / simplifié avec un langage dynamique.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top