gpt4 book ai didi

oop - 实现类似的用例看起来像代码重复

转载 作者:行者123 更新时间:2023-12-03 15:00:45 26 4
gpt4 key购买 nike

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

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

  • 该算法对于所有对象类型都是相同的,但必须处理一些重要的差异:
  • 不同类型
  • 不同的目标 Web 服务方法,不同的对象到 DTO 映射
  • 每个对象类型有不同的过滤器

  • 我考虑了一些解决方案:
  • 不要将导出算法视为代码重复,并为每个对象类型实现一个算法。任何数据到任何外部系统的导出都可以用这种算法来描述——这是否意味着我们应该总是有一个通用类来将任何东西导出到任何地方?:)
  • 将差异转移到策略(一个策略接口(interface)为所有差异创建抽象) - 我什至实现了它。
  • 使用泛型 - 不幸的是,我正在使用 PHP 进行编码,这是不可能的

  • 问题:

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

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

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

    我的第一个实现的描述:

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

    最佳答案

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

    保持简单,只需分别写出每个用例。如果您发现有很容易重构的通用代码,请在一切顺利后进行。在它们显然是必要的之前,不要过度思考或添加模式。

    关于oop - 实现类似的用例看起来像代码重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31022820/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com