Passa la richiesta come argomento per servire client e pass client di servizio come argomento da richiedere [chiuso]

2

Ho bisogno di una raccomandazione di progettazione: ho una classe che invia una richiesta http tramite un'altra classe WebServiceHandler() Sto esitando tra le seguenti due implementazioni, quale scegliere? Qual è il più preciso dal punto di vista OO?

Prima implementazione:

/* WebServiceHandler class is charged on sending http requests and getting responses */
public class WebServiceHandler()
{
    public boolean sendRequest(String method)
    {
        /*send a http request, get a response*/
    }
}

/* Step is modeling one request execution, on the main program I can have multiple steps to get a scenario like: connect to the server, send a get request, etc */
public class Step()
{
    private boolean result=false;
    private WebServiceHandler handler;

    public Step (WebServiceHandler handler)
    {
        this.handler= handler;
    }

    private void execute()
    {
        result = handler.sendRequest(this.httpMethod);
        /*this.httpMethod can be GET Http method for example*/
    }
}

public class Main
{
    public static void main(String[] args)
    {
        handler= new WebServiceHandler();
        step= new Step(handler);
        step.execute();
    }
}

Seconda implementazione:

public class WebServiceHandler()
{
    public boolean sendRequest(String method)
    {
        /*send a http request, get a   response*/
    }

    public void executeStep(Step step)
    {
        result=sendRequest(step.getMethod());
        step.setResult(result);
    }
}

public class Step()
{
    private boolean result=false;

    setResult(String result){/*setter*/}
}

public class Main
{
    public static void main(String[] args)
    {
        handler = new WebServiceHandler();
        step = new Step();
        handler.executeStep(step);
    }
}
    
posta sabrina2020 31.12.2015 - 16:18
fonte

1 risposta

2

Data la tua descrizione delle classi Step e WebServiceHandler , la classe Step dipende da WebServiceHandler per essere in grado di fare il suo lavoro, ma non viceversa.
Ciò significa che dovrebbe essere possibile creare / creare un WebServiceHandler senza avere un'istanza di Step .

Dato come si trova la direzione delle tue dipendenze, la prima opzione di progettazione è la migliore tra le due.

Per semplificare il test del codice senza dover accedere a un servizio web in diretta, ti consigliamo di creare un'interfaccia ( IWebServiceHandler ) per WebServiceHandler . Questa interfaccia è ciò su cui la classe Step dovrebbe dipendere. In questo modo puoi sostituire il WebServiceHandler effettivo per una versione fittizia mentre collaudi la classe Step .

    
risposta data 01.01.2016 - 11:35
fonte