Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Singleton X Injeção de dependências

Minha situação é a seguinte: trabalho em um aplicativo relativamente antigo e com muitas funcionalidades, desenvolvido no eclipse com pouquíssimas bibliotecas externas. Para facilitar o desenvolvimento de novas chamadas à API, estou implementando o Retrofit no projeto.

O grande problema é que adicionar dependências em um projeto feito no eclipse não é muito simples. Gostaria de colocar só as que fossem realmente necessárias. Com isso, ao invés de usar o dagger, criei uma classe singleton para retornar a instância do Retrofit e dos objetos que o utilizam.

No curso não ficou muito claro qual o real problema de fazer isso, se é só uma questão de legibilidade do código ou se de fato pode trazer algum problema.

Há de fato algo que torne a utilização de objetos estáticos prejudicial?

Abaixo exemplo dos códigos:

public class RetrofitModule {

    private Retrofit retrofit;
    private static RetrofitModule instance;

    private RetrofitModule(){
//        HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
//        interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);

        OkHttpClient client = new OkHttpClient.Builder()
            //.addInterceptor(interceptor)
            .readTimeout(15, TimeUnit.SECONDS)
            .connectTimeout(15, TimeUnit.SECONDS)
            .build();

        retrofit = new Retrofit.Builder()
            .baseUrl("https://minhaempresa.com.br/meuapp/api2/")
            .client(client)
            .addConverterFactory(GsonConverterFactory.create())
            .build();
    }

    public static RetrofitModule getInstance(){
        if(instance == null){
            instance = new RetrofitModule();
        }

        return instance;
    }

    public Retrofit getRetrofit(){
        return retrofit;
    }
}
public class AbastecimentoModule {

    private AbastecimentoService abastecimentoService;
    private static AbastecimentoModule instance;

    private AbastecimentoModule(){
        Retrofit retrofit = RetrofitModule.getInstance().getRetrofit();
        abastecimentoService = retrofit.create(AbastecimentoService.class);
    }

    public static AbastecimentoModule getInstance(){
        if(instance == null){
            instance = new AbastecimentoModule();
        }

        return instance;
    }

    public AbastecimentoService getAbastecimentoService(){
        return abastecimentoService;
    }
}
1 resposta
solução!

Fala ai André, tudo bem ?

O mais recomendado é tentar migrar pro Android Studio já, seria um ponto interessante a ser feito.

Mas de resto, deixar ele como um singleton, não haverá nenhum problema não.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software