使用动态 JVM 语言创建存根数据结构的示例?
Posted
技术标签:
【中文标题】使用动态 JVM 语言创建存根数据结构的示例?【英文标题】:Examples for creating stub data structures with dynamic JVM Languages? 【发布时间】:2010-09-22 09:14:31 【问题描述】:多年来,我想我已经看到并尝试了所有可以为复杂对象图生成存根数据结构(假数据)的方法。在 java 中总是很麻烦。
* * * *
A---B----C----D----E
(请原谅廉价的 UML)
关键问题是值之间存在一定的关系,因此 C 的某个实例可能暗示 E 的给定值。
我所看到的任何在 Java 中应用单个模式或一组模式来解决此问题的尝试最终都会变得混乱。
我正在考虑 groovy 或任何动态 vm 语言是否可以做得更好。使用闭包应该可以使事情变得更简单。
任何人有这个问题的任何参考/示例(最好)用 groovy 或 scala 很好地解决?
编辑: 我不知道“Object Mother”是模式的名称,但这是我遇到的麻烦:当 Object Mother 生成的对象结构足够复杂时,你总是会得到一个相当对象母体内部的复杂内部结构(或通过组合多个对象母体)。给定一个足够大的目标结构(比如 30 个类),找到实现对象母亲的结构化方法真的很难。既然我知道了模式的名称,我可以更好地用谷歌搜索它;)
【问题讨论】:
Scala 不是动态语言。它具有很多特性,但实际上它比 Java 更加静态和类型安全。 关于你的问题,我真的不确定你在问什么。您是在谈论动态生成的数据来填充数据结构吗? 【参考方案1】:您可能会发现Object Mother 模式很有用。我已经在我当前的 Groovy/Grails 项目中使用它来帮助我创建示例数据。
它不是特定于 groovy 的,但动态语言通常可以更轻松地使用鸭子类型和闭包创建类似的东西。
【讨论】:
【参考方案2】:我通常使用构建器模式创建对象母体。
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 所说,这可以通过动态语言来改进/简化。
【讨论】:
以上是关于使用动态 JVM 语言创建存根数据结构的示例?的主要内容,如果未能解决你的问题,请参考以下文章