Примеры для создания структур данных заглушки с динамическими языками JVM? - PullRequest
1 голос
/ 14 ноября 2008

С годами, я думаю, я видел и пробовал все мыслимые способы создания заглушенных структур данных (поддельных данных) для сложных графов объектов. Это всегда становится волосатым в Яве.

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

(простите дешево UML)

Ключевой вопрос заключается в том, что между значениями существуют определенные отношения, поэтому определенный экземпляр C может подразумевать заданные значения для E.

Любая попытка применения единого шаблона или группы шаблонов для решения этой проблемы в Java в конечном итоге приводит к беспорядку.

Я рассматриваю, может ли groovy или любой из динамических языков vm работать лучше. Должно быть возможно сделать вещи значительно проще с замыканиями.

У кого-нибудь есть какие-либо ссылки / примеры этой проблемы, решаемой с помощью (предпочтительно) groovy или scala?

Edit: Я не знал, что «Мать объекта» была названием паттерна, но у меня возникли проблемы: когда структура объекта, генерируемая Матерью объекта, достаточно сложна, у вас всегда будет довольно сложная внутренняя структура внутри самой Матери-Объекта (или путем составления нескольких Матери-Объектов). Учитывая достаточно большую целевую структуру (скажем, 30 классов), найти структурированные способы реализации объекта-матери очень сложно. Теперь, когда я знаю название шаблона, я могу лучше его погуглить;)

Ответы [ 2 ]

2 голосов
/ 15 ноября 2008

Вы можете найти шаблон Object Mother полезным. Я использовал это в моем текущем проекте Groovy / Grails, чтобы помочь мне создать пример данных.

Это не специфично для Groovy, но динамический язык часто облегчает создание чего-то подобного, используя утку и закрытие.

1 голос
/ 10 апреля 2010

Я обычно создаю объектные матери, используя шаблон строителя.

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

}

Тогда его можно использовать так:

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

Как сказал Тед, это можно улучшить / упростить с помощью динамического языка.

...