实现类似的UseCases看起来像代码重复

时间:2015-06-24 09:30:08

标签: oop design-patterns

我有以下情况。用户可以将多种对象类型(交易,发票等)导出到外部会计系统。 导出算法有步骤:

  • 通过某些过滤器获取对象
  • 逐个将对象导出到会计系统(每个对象类型的Web服务方法)
  • 注册了导出给定文档的事实,因此不会再次导出
  • 为用户准备摘要(导出的文档数量,错误消息等)

所有对象类型的算法都相同,但必须处理一些重要的差异:

  • 不同类型
  • 不同的目标Web服务方法,不同的对象到DTO映射
  • 每种对象类型的不同过滤器

我考虑了一些解决方案:

  • 不要将导出算法视为代码重复,并为每个对象类型实现算法。可以通过这样的算法描述将任何数据导出到任何外部系统 - 它是否意味着我们应该总是有一个通用类将任何东西导出到任何地方?:)
  • 将差异转移到策略(一个策略界面为所有差异创建抽象) - 我甚至实现了它。
  • 使用泛型 - 遗憾的是我在PHP编码并且不可能

问题:

是否为每个对象创建一个单独的导出算法类型代码重复?

也许所有这些都应该被视为单独的用例?

如果它是重复的,那么我应该考虑哪些技术来避免它?

我的第一次实施说明:

在第一种方法中,我定义了一个可导出的抽象,但我对它并不满意。每个对象的有效负载完全不同。 一个Exportable接口只定义了一个方法getId,它用于注册该对象被导出(并且由于它不会再次导出)。 为此目的,抽象很好,但问题转移到了exportService,它必须检查具体实例以选择DTO映射器和端点。所以exportService打破了SOLID。

1 个答案:

答案 0 :(得分:0)

您上面描述的所有内容都不是特定于域的逻辑(实际上您甚至没有在您的问题中提到问题域),因此我认为它不属于域驱动设计。因为它不是特定于域的逻辑,所以我不会过多担心代码重复,特别是考虑到解决方案似乎并不明显。

保持简单,并分别写出每个用例。如果您发现存在易于重构的公共代码,请在一切顺利完成之后执行此操作。在明显需要之前,不要过度思考或添加模式。