2016-12-16 7 views
1

MVPとクリーンアーキテクチャを実装しているアンドロイドアプリを開発しています。MVP上のstrings.xmlとクリーンアーキテクチャ

  • プレゼンターとビューのインタフェースを持つ一つのコアモジュール、...
  • 1つのドメインのコア実装とリポジトリとモジュール、データソース..
  • アプリケーションモジュール(そう:私は次のシナリオを持っていますフラグメント/アクティビティ)。

現在、strings.xmlファイルはアプリケーションモジュールに含まれていますが、私はそれがコモンズモジュールにあるべきかどうかを考えています。問題は、発表者がテキストをビューに設定する必要があることがあるため、発表者はstrings.xmlにアクセスする必要があることです。私は2つの可能な解決策で考えました:

1)アプリケーションモジュールで実装され、プレゼンターに注入されるコアモジュール上にTextHelperインターフェースを作成します。プレゼンターはこのヘルパーを使用して必要な文字列を取得します。 (これは私が実装した解決策です)。

2)strings.xmlファイルを共通モジュールに移動し、コアモジュールからファイルにアクセスできるようにします。しかし、この解決策には問題があります。プレゼンターにはコンテキストがありません。

あなたはどう思いますか?最善のアプローチは何ですか?事前

+0

この質問には、複数の可能性があるため、多くの回答があると思います。私の個人的な意見では、文字列はビューの一部であるため、プレゼンターはそれについて知る必要はありません。次に、ビューには内部に文字列を含むメッセージを表示するメソッドがあり、プレゼンタは単にそれらを呼び出す必要があります。 – adalPaRi

+0

このサンプルプロジェクトはhttp://github.com/mmirhoseini/marvelで見ることができ、この記事ではhttps://hackernoon.com/yet-another-mvp-article-part-1-lets-get-to- know-the-project-d3fd553b3e21を使用して、MVPをよりよく理解してください。 –

+0

ビジネスロジックの一部がユーザーに適切なテキストを表示することがあるため、プレゼンターとユースケース/インタラクタが文字列や書式を処理する必要があります。これにより、ビューにその責任を任せず、スローでフレークな計測テストを使用する代わりに、正しいテキストが出力されているかどうかを確認する単体テストを行うことができます。 –

答えて

0

おかげであなたは、任意の場所のアプリからコンテキストを取得するためにApplicationクラスを使用することができます。あなたのビューが文字列に関連するif/else秒を入れ子にしている場合

public class MVPApplication extends Application { 
    private static Context context; 

    public static Context getContext() { 
     return context; 
    } 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     context = getApplicationContext(); 
    } 
} 
0

、その後、彼らはおそらく、ユニットテストする必要があります。したがって、そのロジックはプレゼンターやユースケースにとどまり、より迅速にテストすることができます。

実際の文字列を、クリーンアーキテクチャスキームの「外側のレイヤー」、つまりコンテキストオブジェクトの「外側のレイヤー」にあると仮定して、検索する方法についての質問です。私はユニットテストを書くときにモックを注入することができるので、文字列の実際の文字列の意味はではなく、の処理方法に興味があります。私は非常に似たアプローチを試みて、それをStringsRepositoryと呼んでいます。 、実装するのは非常に簡単で、しかし、プレゼンターがあなたのR.stringクラスに依存行います:

  1. 単にContext.getString()をラップgetString(@StringRes int stringResId, Object... formatArgs)のような単一の方法:

    不明点は、リポジトリAPIは、のようになります方法ですテスト中のコードと同じモジュール内にあることが必要です(strings.xml)。

  2. 文字列ごとに1つのオプションを指定し、それぞれに適切な文字列IDへの参照が含まれています。この解決策では、抽象度を最適化することができますが、インターフェイスと実装の両方が大きくなり、多くのドメインクラスがそれに依存する可能性があります。取り扱い注意。
  3. 好きですが、複数のクラスがあり、アプリの各部分に1つずつあります。各クラスは、(1)と同様の基本クラスを持ちますが、そのメソッドはprotectedの可視性を持ちます。

あなたのケースに最適なオプションは(2)または(3)ですが、あなたの走行距離は異なる場合があります。

関連する問題