TLDR; Ho un'interfaccia di repository e più origini dati, ognuna con un identificatore di dati diverso: come posso mantenere un solo metodo nell'interfaccia?
Ho bisogno di leggere un oggetto dominio OrderData
da due diversi repository: uno è un servizio esterno e l'altro è un database locale.
Chiamiamoli OutsideServiceOrderRepo
e LocalDbOrderRepo
.
Entrambi implementano un'interfaccia chiamata IOrderRepoRead
:
Interface IOrderRepoRead
+GetOrder(OrderEntityData) : Order
Non userò mai entrambe le implementazioni nello stesso caso d'uso, è una o / o situazione. Ho risolto come iniettare uno o l'altro repository nella radice della composizione, a seconda del caso d'uso. Il problema che ho è che ognuno di questi archivi di dati ha un identificatore diverso per i dati che sto cercando:
- Il negozio locale ha un
OrderId
semplice che ho nel mio sistema. - Il servizio esterno richiede di interrogare utilizzando
Tax_number+Name+what_not
di una persona, ecc ...
Le idee che ho presentato finora sono le seguenti:
- Ho un tipo chiamato
OrderEntityData
con proprietàTaxNumber
,Name
,OrderId
. Entrambe le implementazioni possono utilizzare questo tipo, ogni implementazione funziona con le proprietà richieste:OutsideServiceOrderRepo
utilizzaTaxNumber
,Name
, mentreLocalDbOrderRepo
utilizzaOrderId
. - Rilascio il
OrderEntityData
e ho due metodi diversi nel mioIOrderRepoRead
.
.
Interface IOrderRepoRead
+GetOrder(taxNumber, name, whatNot) : Order
+GetOrder(orderId) : Order
Sono propenso ad andare con l'approccio n. 1, ma sembra comunque che ci sia una certa quantità di accoppiamento tra il repository e il codice client.
Come posso alternare in modo efficiente tra identificatori diversi?