Design patterns 批处理和业务层通信
我正在使用SpringBatch设计一个批处理应用程序,其中我有以下体系结构(层):Design patterns 批处理和业务层通信,design-patterns,domain-driven-design,spring-batch,Design Patterns,Domain Driven Design,Spring Batch,我正在使用SpringBatch设计一个批处理应用程序,其中我有以下体系结构(层): 我将所有spring批处理代码(读取文件、处理和写入)放在顶部模块中。此顶部模块特定于文件的特定格式。因此,我将来可能会有一个新的并行模块,能够读取/处理/写入新的格式。与格式无关,文件的每一行对应于要执行的特定操作。例如,每一行可能代表“将行项目X添加到订单Y”的操作。因此,对于每一行,在完成读取和处理之后,我使用一个自定义ItemWriter,它调用紧接下面的层的所需操作 实现不同批处理操作的业务逻辑层。
- 我将所有spring批处理代码(读取文件、处理和写入)放在顶部模块中。此顶部模块特定于文件的特定格式。因此,我将来可能会有一个新的并行模块,能够读取/处理/写入新的格式。与格式无关,文件的每一行对应于要执行的特定操作。例如,每一行可能代表“将行项目X添加到订单Y”的操作。因此,对于每一行,在完成读取和处理之后,我使用一个自定义ItemWriter,它调用紧接下面的层的所需操作
- 实现不同批处理操作的业务逻辑层。这些操作中的每一个都是使用域层对象实现的。例如,“将行ite;X添加到订单Y”操作将通过使用OrderRepository检索订单,然后调用订单的addLineItem方法来实现
- 我拥有所有域对象的域层。按照上一个示例,我有Order和LineItem实体
- 顶层模块和业务逻辑层之间的接口是否有最佳实践(可能是特定的设计模式)
- 假设每个文件只包含一个订单的行。编写每一行的简单方法是每行调用一个批处理操作。在本例中,对于每一行,都会调用OrderRepository来检索订单,然后保存订单。我正在考虑另一种方法,即按块编写行(就像我们对SpringBatch所做的那样)。写入操作采用的参数具有类型列表。按照第二种方法,我需要向业务操作传递将区块添加到相关顺序所需的数据。使用哪个表单在顶层模块和业务逻辑层之间传递信息
- 考虑数据和数据流
- 有多少数据
- 瓶颈是什么?(处理与写作,通常是写作部分)
public class SimpleItemWriter implements ItemWriter<SimpleItem> {
@Override
public void write(List<? extends SimpleItem> items) throws Exception {
// do something, e.g. delegate to another spring bean
}
}
<bean id="sample-item-writer-adapter" class="org.springframework.batch.item.adapter.ItemWriterAdapter">
<property name="targetObject" ref="businessLayerBean" />
<property name="targetMethod" value="doSomething"
</bean>
<step id="splitFilesStep">
<tasklet>
<chunk
reader="itemReader"
writer="sample-item-writer-adapter"
commit-interval="5">
</chunk>
</tasklet>
</step>
公共类SimpleItemWriter实现ItemWriter{
@凌驾
公共空白写入(列表)