1

多年来,我认为我已经看到并尝试了所有可以为复杂对象图生成存根数据结构(假数据)的方法。它总是在java中变得毛茸茸。

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

(请原谅廉价的 UML)

关键问题是值之间存在某些关系,因此 C 的某个实例可能暗示 E 的给定值。

我所看到的任何在 Java 中应用单个模式或一组模式来解决这个问题的尝试最终都会变得混乱。

我正在考虑 groovy 或任何动态 vm 语言是否可以做得更好。使用闭包应该可以使事情变得更简单。

任何人都可以用(最好)groovy 或 scala 很好地解决这个问题的任何参考/示例?

编辑:我不知道“对象母亲”是模式的名称,但这是我遇到的麻烦:当对象母亲生成的对象结构足够复杂时,你总是会得到Object Mother 内部的一个相当复杂的内部结构(或通过组合多个 Object Mother)。给定一个足够大的目标结构(比如 30 个类),找到实现对象母体的结构化方法真的很困难。既然我知道了模式的名称,我可以更好地用谷歌搜索它;)

4

2 回答 2

2

您可能会发现Object Mother模式很有用。我在当前的 Groovy/Grails 项目中使用了它来帮助我创建示例数据。

它不是特定于 groovy 的,但是动态语言通常可以更容易地使用鸭子类型和闭包来创建类似的东西。

于 2008-11-15T03:05:33.677 回答
1

我通常使用构建器模式创建对象母亲。

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

正如 Ted 所说,这可以通过动态语言来改进/简化。

于 2010-04-09T22:06:26.430 回答