Dove e come connettersi all'API esterna nella mia classe di servizio?

1

Nella mia classe di servizio mi piacerebbe connettermi all'API esterna. Dove e come dovrei farlo?

1) Inietta nel costruttore ExternalClass e assegna a proprietà privata. Avanti in un'altra proprietà in connoter chiamata connect.

public MyClass(ExternalApi externalApi) {
    this.externalApi = externalApi;
    this.ExternalApiConnect externalApiConnect = externalApi.connect;
}    

public void firstMethod() {
   externalApiConnect.first();
}

public void secondMethod() {
   externalApiConnect.second();
}

2) Costruttore esterno, quindi se creo dipendenze in DI, non chiamo connessione a servizio esterno.

private ExternalApiConnect externalApiConnect;

public MyClass(ExternalApi externalApi) {
    this.externalApi = externalApi;

}    

public void firstMethod() {
   if (externalApiConnect == null) {
        externalApiConnect = externalApi.getConnect();
   }
   externalApiConnect.first();
}

public void secondMethod() {
   if (externalApiConnect == null) {
        externalApiConnect = externalApi.getConnect();
   }
   externalApiConnect.second();
}

Ma ora ho due ripetizioni e ho lo stato nella mia classe di servizio. Non penso che lo stato dovrebbe essere in classe di servizio?

Qual è il modo migliore per questo?

Modifica:

3)

public MyClass(ExternalApi externalApi) {
    this.externalApi = externalApi;
}    

public void firstMethod() {
   externalApi.getConnect().first();
}

public void secondMethod() {
   externalApi.getConnect().second();
}
    
posta maxu 10.11.2018 - 17:37
fonte

1 risposta

0

Prima di tutto, hai un odore nel tuo codice, non dovresti mai accedere a una proprietà direttamente come externalApi.connect nella classe ExternalApi, modifica la visibilità della variabile di istanza connect , da public a private e crea una funzione getter pubblica per accedervi.

In secondo luogo, se hai solo bisogno che l'oggetto si connetta nella tua classe, non devi passare ExternalApi, inietti solo ExternalApiConnect.

Se hai bisogno di entrambi, rimuovi la variabile ExternalApiConnect dalla tua classe, è già a parte lo stato ExternalApi, perché duplicare i riferimenti a un oggetto ...

    
risposta data 10.11.2018 - 19:12
fonte