存储库模式,不同的标识符

时间:2018-01-11 15:53:21

标签: design-patterns repository

TLDR; 我有一个repo接口和多个数据源,每个都有不同的数据标识符 - 如何在界面中只维护一个方法?

我需要从两个不同的存储库中读取域对象OrderData:一个是外部服务,另一个是本地数据库。 我们称他们为OutsideServiceOrderRepoLocalDbOrderRepo。 它们都实现了一个名为IOrderRepoRead的接口:

Interface IOrderRepoRead
  +GetOrder(OrderEntityData) : Order

我永远不会在同一个用例中使用这两种实现,它只是一种情况。我已经解决了如何在组合根处注入一个或另一个repo,具体取决于用例。 我遇到的问题是,这些数据存储中的每一个都具有不同的数据标识符:

  • 本地商店在我的系统中有一个简单的OrderId
  • 外部服务要求我使用某人Tax_number+Name+what_not等...
  • 进行查询

我到目前为止提出的想法如下:

  1. 我有一个名为OrderEntityData的类型,其属性为TaxNumberNameOrderId。两种实现都可以使用此类型,每种实现都使用它所需的属性:OutsideServiceOrderRepo使用TaxNumberName,而LocalDbOrderRepo使用OrderId
  2. 我放弃OrderEntityData并在我的IOrderRepoRead中使用两种不同的方法。
  3. Interface IOrderRepoRead
      +GetOrder(taxNumber, name, whatNot) : Order
      +GetOrder(orderId) : Order
    

    我倾向于采用方法#1,但仍然感觉回购和客户代码之间存在一定程度的耦合。

    如何有效地在不同的标识符之间切换?

0 个答案:

没有答案