2016-09-30 1 views
0

モデルレイヤーには、Retrofitのすべての呼び出しを処理するDataManagerクラスがあります。アンドロイドMVP構造のアプリでは、文字列リソースを{path}としてRetrofit呼び出しに渡す "正しい"方法は何でしょうか?

すべてのRESTエンドポイントを別のXMLファイル(.gitignore用)に文字列リソースとして格納するため、レトロフィットメソッドには{path}パラメータが必要です。

ContextをModelレイヤーとPresenterレイヤーに渡したくない場合(そしてcontext.getStringを実行する場合)、これらのパラメーターを取得して渡すにはどうすればよいですか?

答えて

1

"Dagger 2"のようなライブラリを使用するか、または依存性反転の助けを借りて、依存性注入を使用するのが最善の方法です。

http://www.vogella.com/tutorials/Dagger/article.html

( - - MVPアーキテクチャで使用することが最も推奨学習は少し複雑です。この方法は、より多くのコードと時間が、ベストプラクティスを必要とします):あなたは、このリンクを参照することができます最初の方法を行うための

アンドロイドではなく、純粋なJavaからあなたをいくつかのことを必要とする変数のこのタイプを提供するために、 - (あなたが短剣を使用したくない場合は、それを使用する少し汚いコード以下)

:第二の方法として、以下のやるを行うには

インターフェイスクラスを作成し、ニーズを満たすメソッドを追加できます。あなたのモデルとプレゼンターを想定し

public interface Provider { 
public String providePath(); 
} 

あなたは循環依存を防ぐために、モジュールにこのインターフェイスを追加する必要があります別の純粋なJavaモジュールである:コードは次のようなものになるだろう。このインターフェースをあなたのアンドロイドクラスに実装し、それをあなたのプレゼンターに毎回送信します。

public class ProviderImpl implements Provider { 

private Context ctx; 
public ProviderImpl(final Context ctx) { 
    this.ctx = ctx; 
} 

@Override 
public string providePath() { 
    //provide the path from resources 
} 
} 

このようにして、プロバイダインタフェースにメソッドとして新たなニーズを追加し、プレゼンタで使用することができます。 あなたは、あなたの発表者の引数としてプロバイダ変数を取得する必要があります。

私はDAGGER MYSELFを使用します。なぜなら、これは多くのクリーナーとベストプラクティスです。

+0

私はすでにDagger2でDIを行っていました。あなたのソリューションに似た何かをやり終えました。私は '' EndpointProvider''クラスを作成し、それを '' DataManager'''に注入しました。とにかく答えてくれてありがとう。 – papageorgiouk

関連する問題