多年来,我认为我已经看到并尝试过为复杂对象图生成存根数据结构(伪数据)的所有可能的方法。它总是在java中变得毛茸茸。
* * * *
A---B----C----D----E
(原谅廉价的UML)
关键问题是值之间存在某些关系,因此C的某个实例可能意味着给出了E的值。
我在应用单个模式或模式组来解决java中的这个问题时所看到的任何尝试最终都会变得混乱。
我正在考虑如果groovy或任何动态虚拟语言可以做得更好。应该可以通过闭包使事情变得更简单。
任何人都有任何参考/这个问题的例子很好地解决了(最好)groovy或scala?
编辑: 我不知道“对象母亲”是模式的名称,但它是我遇到麻烦的那个:当对象母亲生成的对象结构足够复杂时,你总会得到一个公平的Object Mother本身内部的复杂内部结构(或通过组合多个Object Mothers)。给定足够大的目标结构(说30个类),找到实现对象母的结构化方法真的很难。现在,我知道模式的名称,我可以更好地谷歌;)
答案 0 :(得分:2)
您可能会发现Object Mother模式很有用。我在我当前的Groovy / Grails项目中使用它来帮助我创建示例数据。
这不是特定的常规,但动态语言通常可以使用鸭子打字和闭包更容易创建这样的东西。
答案 1 :(得分: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所说,这可以通过动态语言进行改进/简化。