2017-01-11 1 views
2

私のアンドロイドアプリケーションでMVPパターンを使用しています。私は接続クラスのステータスをチェックするアプリケーションクラスにいくつかの静的メソッドを持っています。私のアプリケーションクラスで宣言されているプレゼンターの静的変数を使用することをお勧めします

public class AppModule extends Application { 

    public static boolean isNetworkAvailable() { 
     ConnectivityManager connectivityManager 
       = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo(); 
     return activeNetworkInfo != null && activeNetworkInfo.isConnected(); 
    } 
} 

私はインターネット接続を確認するためにプレゼンターでそのアプリケーションレベルの静的メソッドを使用しています。

public class ActivityWallPresenter { 

private CreatrixTestCall creatrixTestCall; 

@Inject 
public ActivityWallPresenter(CreatrixTestCall creatrixTestCall) { 
    this.creatrixTestCall = creatrixTestCall; 
} 

public void loadPosts(ActivityWallFragmentContract activityWallFragment) { 
    this.fragmentContract = activityWallFragment; 
    if (AppModule.isNetworkAvailable()) { 
     fragmentContract.showProgress(); 
     callWeb(); 
    } else { 
     fragmentContract.onNetworkDisconnected(); 
    } 
} 

静的メソッドを呼び出すとよいでしょうか?もしそうでなければ私には他のアプローチを提案してください。

+1

静的メソッドではありますが、ここに配置することはできますが、優れたコーディング手法は、別のクラス(utils.javaまたはglobalMethods.javaなど)に配置することです。 –

+1

「良いアイデア」として定義した内容に依存します。あなたが静的メンバーに変数を割り当てない限り、私はそこにそれほど害はないと思います。しかし、私は静的関数で変数 'context'を使用していることがわかります。それが 'Activity'のインスタンスであれば、そのオブジェクトはガベージコレクションされず、メモリリーク(一種の)を引き起こします。 – 0xDEADC0DE

+1

これは仮定に依存して、あなたのコードを作ることができます。真のOOPアプローチを使いたい場合は、コンテキストを指定して接続性をチェックし、それをプレゼンタに注入するクラスを作成する必要があります。しかし、コード内にプロシージャを置くことができれば、静的メソッドが最善のアプローチですと私は思います。 2番目の質問は、この静的関数を配置する場所です –

答えて

3

public staticのメソッドを使用している場合は、分かりやすいコードを別のクラスに記述してください。

Applicationクラスには書き込む必要はありません。

そして私はApplicationクラスはアプリケーションクラスがActivitiesServicesがされて実行される前に開始され、そして、私はほとんどMultidexを初期化するためにApplicationクラスを使用しているため、分析Multidexなどのような特定の物事を開始することだと思います。

public staticメソッドにUtils.javaのような別のクラスを作成することをお勧めします。

+1

合意した上で、(プロジェクトが複雑になるにつれて)収集を開始する場所に「utils」パッケージを作ることができます。ここでは、リファクタリング前にアプリケーション全体で1トンの 'utils'ファイルがあったところで私が最近書いた課題の例を示します。それらをすべて自分のパッケージに入れた後は、コードをクリーンアップするのに本当に役立ちました。 https://gitlab.com/vandy-aad-2/aad-2-assg-2/tree/master/app/src/main/java/vandy/mooc/assignments/framework/utils – mawalker

関連する問題