コンテキスト:バックエンドを備えたAndroidのニュースアグリゲーター。 Android開発:アーキテクチャ開発

導入部(すべての記事へのリンク付き)



水の記事で、私はすでにAndroidクライアントをプロジェクトの計画クライアントにすべきだと書いています。大勢の人がアクセスでき、軽量、機能的、美しく、高速です(アプリケーションではなく、夢です!)。 プラットフォームを選択する理由ですべてが明確な場合、それを基に上記のすべての要件を実装する方法がすべてとは程遠いものでした。



以前は、Androidの開発は行っていませんでした。そのため、私にとってかなり貴重な情報源は次のとおりでした。





Androidのアーキテクチャとそれらのコンポーネントの相互作用を使用して、示された質問のソースを調べた後、それ以上はありませんでした。 ただし、重要な疑問が1つ残っていました。アプリケーション自体の構造はどうなるのでしょうか。 いくつかの例とプロトタイプは、機能の成長に伴い、すべてがすぐに「ヌードル」に変わり始めたことを示しました。





一歩後退して見直す必要があることが明らかになりました:Androidは数年前から存在し、このプラットフォーム用のコードを長い間開発している人々がいます。大規模な開発プロジェクトがあります。したがって、確立されたプラクティスに関する情報を入手できる場所があります。



Androidアプリケーションに適したアーキテクチャを見つけるための主な基準は次のとおりです。





この検索により、YouTubeで興味深いビデオが見つかりました。 「テストコードを書いています」 (モバイル開発に関するメビウス会議でのEvgeny Matsyuk(a)によるスピーチの録音)(非常に多くがありました!) 実装のために、追加のリソースとツールを検討する必要がありました。





RxJavaの研究と併せてこれらのプラクティスを使用したプロトタイプの開発には多くの時間がかかりましたが、しばらくして最初のプロトタイプの準備が整いました。 それの特徴は、新しい画面を追加するときに作成されるインターフェースとクラスの数が非常に多いことでした:3つのインターフェースと3つのクラス(アクティビティ/フラグメントとそのインターフェース、プレゼンターとそのインターフェース、インターアクターとそのインターフェース)-オーバーエンジニアリングの典型的な例です。 正式には、現時点では何も変わっていませんが、これはメリットの裏返しだと思います。 しかし、出力では、疎結合構造を持つ簡単にテストされたアプリケーションを取得します。



実装



Habrの記事「クリーンアーキテクチャのエラー」から、クリーンアーキテクチャのメモリコンポーネントの更新について説明します。

画像

選択したアーキテクチャの各Androidコンポーネントと要素を次の表に示します。

クラス レベル 実装可能なインターフェース 予定
実装アクティビティ/フラグメント(XXXX_Activity / XXXX_Fragment) UI I_XXXX_View Android要素を使用したアクションの実際の実装:プロパティの変更、コールバックの受信、サービスの開始、Android APIの操作
XXXX_PresenterImpl UI I_XXXX_Presenter プレゼンテーションレベルのアクション、プレゼンテーションロジックの調整-インターフェイスメソッドI_XXXX_View、I_XXXX_Interactorの呼び出し
XXXX_InteractorImpl ビジネス/ユースケース I_XXXX_Interactor メインアプリケーションロジックの実装、インターフェイスメソッドI_XXXX_Repositoryの呼び出し
XXXX_RepositoryImpl データ/リポジトリ I_XXXX_Repository データソース、外部API、Androidネットワークとデータベース、ContentProvidersなどとの直接対話を実装する




相互作用の組織



コンポーネントとデータ転送の相互作用は、Androidアプリケーションのユーザーが入力するよりも多くのデータを受信するという事実を考慮して編成されます。 したがって:





パッケージ構成



Fernando Cejasによる元の記事では、「レベル別」と「機能別」を編成するための2つのオプションがありました。私は自分で組み合わせたアプローチを開発しました。





興味深い機能は、インタラクターの数が「メイン画面の数」+「エンティティの数」に等しくなったという事実でした。トリッキーなデータ収集を編成する必要がある場合があります(たとえば、異なるソースからの組み合わせ)。必要とされるすべてのインターアクターは完全に望まれていませんでした。 さらに、インターアクターは単一のコピーで使用されるという事実を考慮して、メソッドの実行に重要な特定の状態を保存できるため、次のように実装しました:画面のインターアクターは適切なメソッドのエンティティのインターアクターになります(委任の外観につながります)インタラクター画面のメソッド)。



初期化





テストアプローチ



テストに関して-革新的なものはありません:





ご清聴ありがとうございました!



All Articles