2017-05-18 12 views
0

Android MVPアーキテクチャを使用しているときにActivityが参照されるべきか、Presenterコード内にないかどうか疑問に思っていますか?PresenterはAndroid MVPアーキテクチャのアクティビティについて知っていますか?

私が今までに見つけたMVPアーキテクチャの例は、これを参照していませんが、私のコードではPresenterのプロパティではなく、いくつかのメソッドの引数です。これは問題につながりますか?これはAndroid MVPに従っていないのですか?ここで

は1プレゼンターからのコードの例である:適切なMVPの実装では

package com.example.example; 

import android.net.Uri; 
import android.support.v4.app.FragmentActivity; 
import android.support.v4.content.FileProvider; 

import com.example.example.util.Constants; 
import com.example.example.util.ImageFile; 

import java.io.IOException; 

/** 
* Presenter from home screen, (Main), of the app 
*/ 
public class MainPresenter implements MainContract.Presenter { 

    private final MainContract.View mView; 
    private final ImageFile mImageFile; 

    public MainPresenter(MainContract.View mainView, ImageFile imageFile) { 
     mView = mainView; 
     mImageFile = imageFile; 
    } 

    @Override 
    public void takePicture(FragmentActivity activity) throws IOException { 
     mImageFile.create(activity); 

     Uri photoUri = FileProvider.getUriForFile(
       activity, 
       Constants.FILE_PROVIDER_PATH, 
       mImageFile.getFile()); 

     mView.openCamera(photoUri); 
    } 

    Uri getImageFileUri() { 
     return mImageFile.getUri(); 
    } 
} 
+1

openCamera()にいくつかのパラメータを追加するだけで、プレゼンターの中でアクティビティを必要としないのですか?あなたがそれをやっているやり方は、あなたがプレゼンターにアンドロイドの依存関係を作り出していることです。これはあなたが避けたいものです – lelloman

答えて

1

、プレゼンターは、活動について知るべきではありません。アクティビティを使用する場合は、テスト中にアクティビティを模擬しなければならないため、テストが難しくなります。あなたのケースでは、mImageFileをビュー参照を通してアクティビティに渡し、アクティビティクラス内にURIを作成する必要があります。

関連する問題