Sto avendo grossi problemi nel tentativo di sbarazzarmi di questa dichiarazione di commutazione. Per mettere un po 'di contesto in primo luogo, sto lavorando con operazioni batch asincrone. Queste operazioni possono essere applicate a qualsiasi entità nel sistema. Devi solo inviare uno spazio dei nomi diverso.
Esempio:
"jobs": [
{
namespace: "client",
request: {"id": 10, "name": "john"}
},
{
namespace: "invoice",
request: {"id": 99, "number": "F20170101"}
}]
Dopo aver inviato quei lavori, il servizio restituisce dati simili, ma con una chiave di risposta come la seguente:
results: [
{
namespace: "client",
request: {id: 10, name: "john"},
response: {success: false}
},
{
namespace: "invoice",
request: {id: 99, number: "F20170101"},
response: {success: true, s_id: 3310}
}]
Ora arriva la parte divertente
Devo elaborare la risposta e, in base allo spazio dei nomi, devo selezionare il repository appropriato per aggiornare i nostri record del database. Finora ho questa smelly cosa:
if (namespace == 'client') {
customerRepository.doSomething()
} elseif (namespace == 'invoice') {
invoiceRepository.doSomethingTotallyDifferent(withDiffParams)
}
Ora questo chiaramente rompe il principio Open / Close, e non riesco a capire come risolvere questo rimuovendo il switch
(in realtà un if
/ elseif
spaghetti thingy, ma è lo stesso). Grazie in anticipo.
PS: questa non è una domanda di lingua specifica, quindi ti preghiamo di non fornire risposte valide solo per una lingua specifica.