1

私は最初のアンドロイドアプリを開発しています。私のコードが急速に大混乱になっているので、私はMVPパターンに従うことにしました。
私のアプリは、ビュー(フラグメント)、プレゼンター、コントラクト(ビューとメソッドのインターフェイスで、プレゼンターはコミニケーションに使用します)で分割されています。
私の問題は、私はGoogleの場所のAPIを使用して取得するユーザーの場所のフィールドがあるフォームがあることです。私はLocationHelperクラスを持っており、アクセス許可の確認、Google APIクライアントの構築、場所の取得などを行います。
しかし、私はこのクラスを使用するコードをどこに置くべきかわかりません。プレゼンターは、UIのものよりもビジネスロジックであるため、多くのメソッドは呼び出し元のアクティビティをパラメータとして必要とします。 GoogleのAPIクライアントを構築する例:AndroidのMVP - 位置情報サービスのGoogle API呼び出しはどこにありますか?

mGoogleApiClient = new GoogleApiClient.Builder(context) 
      .addConnectionCallbacks((GoogleApiClient.ConnectionCallbacks) current_activity) 
      .addOnConnectionFailedListener((GoogleApiClient.OnConnectionFailedListener) current_activity) 
      .addApi(LocationServices.API).build(); 

または場所の設定要求:

status.startResolutionForResult(current_activity,REQUEST_CHECK_SETTINGS); 

しかし、私はプレゼンターが何のコンテキスト/アンドロイドコードを持つべきではないMVPに理解してきたものから。 この場合のベストプラクティスは何ですか?

+0

なぜ、発表者にはAndroidコードがないのですか?それはかなり恣意的な決定です。 –

+0

@Gabe Sechanそれはテストの目的を破っています。あなたの発表者は、Androidの依存関係なしでテストできるのではなく、インストルメンテーションテストにこれを含める必要があるので、Androidコードは必要ありません。 – Rafa

+0

@Rafaいいえ、MVPにはモデル、ビュー、プレゼンターが必要です。これが唯一の要件です。 MVPについて話していない他の要件を追加したい場合は、MVPのサブセットである可能性のある他のものについて話し合っています –

答えて

0

私はこれを読むことをお勧めしますlink。 Daggerを使ってプレゼンターに渡すことなくコンテキストを注入できますが、私は悪い習慣ではないと思います。

私のプロジェクトでは、私のBasePresenterで、この行をアクティビティから取得する代わりにすべてのコンテキストを取得することがよくあります。

 this.mContext = CorretorApplication.getInstance().getApplicationContext(); 
関連する問題