我正在寻找一些迷你图案: 该程序应该能够支持各种格式作为输入,然后应用转换,并在最后一步将它们加载到数据库中。
其主要目的是提供测试数据。
我最初的想法是将不同的组件粘合在一起,如下所示:
我们有一个从通用数据源[A]中提取到[B]迭代器的提取器 然后是一个映射[B]到[C]的转换器,最后是一个将[C]加载到数据库中的步骤。我敢肯定必须有更好的方法来解决这个问题。是否有更好的,可能更通用的方法来实现这一目标?
trait Importer[A, B, C] {
val extractor: Extractor[A, B]
val transformer: Transformator[B, C]
val loader: Loader[C]
/**
* this is the method call for chaining all events together
*/
def importAndTransformData(dataSource: A): Unit =
{
/**
* extraction step
*/
val output = extractor.extract(dataSource: A)
/**
* conversion method
*/
val transformed = output map (transformer.transform(_))
/**
* loading step
*/
transformed.foreach(loader.load(_))
}
}
致以最诚挚的问候,
的Stefan
答案 0 :(得分:0)
Scala中使用的一种常见方法是自我键入(特别是在Cake Pattern中使用)。在你的情况下,看起来像:
trait Importer[A, B, C] {
self: Extractor[A, B] with Transformator[B, C] with Loader[C] =>
/**
* this is the method call for chaining all events together
*/
def importAndTransformData(dataSource: A): Unit =
{
/**
* extraction step
*/
val output = extract(dataSource: A)
/**
* conversion method
*/
val transformed = output map (transform(_))
/**
* loading step
*/
transformed.foreach(load(_))
}
}
然后,您可以使用以下代码构建导入程序:
val importer = new Importer with FooExtractor with FooBarTransformer with BarLoader {}
或
val testImporter = Importer with MockExtractor with TestTransformer with MockLoader {}
或类似的测试用例。