ereditarietà della classe e parametri aggiuntivi

1

Sto cercando di creare un gateway SMS. Ho una richiesta proveniente da un client (modulo web o API o record del database) che devo elaborare e inoltrare a un'API di terze parti o al provider SMS. Per semplificare le cose, ho deciso di creare un'interfaccia che implementasse l'implementazione di ciascun provider:

interface SMSProvider
  public method sendSMS(sendTo,message)
  public method sendWakeup(sendTo)

Ho pensato che sarebbe stato il mio miglior modo di procedere perché non avrei dovuto cambiare il mio codice quando l'invio a un altro provider - sapevo che quando creo il mio provider, chiamo semplicemente il metodo per eseguire la funzione con il normale i parametri e tutto va bene ... Beh, finché non avrò un nuovo provider che richiede nuovi parametri

new provider requires
  - sendTo
  - message
  - sendFrom
  - validityPeriod

Quindi cosa devo fare? come posso usare la mia interfaccia ora? quando il nuovo provider ha bisogno di parametri extra?

    
posta ManseUK 25.01.2013 - 15:06
fonte

1 risposta

3

In questo caso, la prassi usuale è quella di raggruppare gli argomenti dei metodi di interfaccia in classi astratte e disporre di classi di implementazione che istanziano determinate variazioni dell'astrazione. Così,

interface SMSProvider
public method sendSMS(SMSMessage)
public method sendWakeup(WakeupMessage)

class SMSProvider1
public method sendSMS(Provider1SpecificSMSMessage)
public method sendWakeup(Provider1SpecificWakeupMessage)

class SMSProvider2
public method sendSMS(Provider2SpecificSMSMessage)
public method sendWakeup(Provider2SpecificWakeupMessage)

abstract class SMSMessage
string sendTo
string message

class Provider1SpecificSMSMessage :: SMSMessage
/*
fields from base class plus customizations
*/

class Provider2SpecificSMSMessage :: SMSMessage
/*
fields from base class plus customizations
*/

[Mi spiace, non sono sicuro di quale lingua hai a che fare]

    
risposta data 25.01.2013 - 16:27
fonte

Leggi altre domande sui tag