Android開発のデザインパターン。 パート1-はじめに

スマートフォン用のソフトウェアを書くことは私の趣味です。 それはすべて、Symbianで初めてNokia E51スマートフォンを購入したという事実から始まり、追加のプログラムをインストールすることでその機能を拡張できることが本当に好きでした。

しかし、必要なプログラムが見つからなかったため、自分で作成することにしました。 そして、スマートフォンプログラムへの情熱が始まりました。



Nokiaの責任者がSymbianの時代は数えきれないと言った後、Androidプラットフォームを勉強することにしました。



素材をより良く同化するために、少なくとも自分にとっては有用なプログラムを書くことにしました。 しかし、原始コードの一部がドキュメントからコピーされるとき、それを書くことは子供っぽくありません、しかし、アーキテクチャの開発と現代のプログラミング技術TDD、MVPとIoCを使用する成人で。





問題の声明



私の最初のAndroidアプリはTアラームです。 Androidマーケットで名前で見つけることができます。 現時点では、プログラムにはデザインがなく、少し厄介に見えますが、すぐにデザインが表示されます。



これは単なるアラームプログラムですが、他のプログラムにはない機能が1つあります。



通常、午前6時45分に起床しますが、週に2、3回、例えば朝のランニングなど、別の時間に起床する必要があります。 これを行うには、明日の目覚まし時計の時刻を変更する必要があります。また、後で元のスケジュールに戻すことを忘れないでください。 Androidの他のすべてのアラームでは、明日の時刻をすばやく変更することはできません。これは、長時間設定を変更する必要があるためです。また、変更されたアラームによってトリガーされた後、元の状態に戻ることもありません。

したがって、私のプログラムの主な特徴は、次の操作の時間の単一の変更の可能性であるだけでなく、スケジュールを変更するために、設定をさまようできるだけ時間を費やすべきではないという一般的な原則であることを決定しました。



さらに、目覚まし時計は、Andoridプラットフォームをさらに詳しく調べるための優れたタスクです。 次のような部品:

-ユーザーインターフェイス。 設定を行うには、いくつかのウィンドウを作成する必要があります。

-音楽ファイルを再生します。 組み込みのメディアプレーヤーの機能を調べることができます

-スケジュールをデータベースに保存します。 AndroidでSQLIteデータベースを使用する方法がわかりました

-目覚まし時計を動作させるためのサービスの実装。 時間Xが到着したら、いくつかのスヌーズを考慮して、次の操作の瞬間をプログラムし、モーニングコールを再生する必要があります。 Androidで利用可能なサービスと使用すべきサービスを把握する大きな理由です。

-OSからのさまざまな信号の受信。 アラームサービスは、システムアラームとスマートフォンの起動時にトリガーされる必要があります。



この記事では、開発経験を共有したい一連の記事を開きます。 そして、アプリケーションを開発するときにMVPとTDDを使用することに集中したいと思います。 インターネット上で、私はこれらすべてをバラバラに見つけて、まとめることができました。 これにより、UnitTestを使用してすべての基本的なアルゴリズムがテストされたアプリケーション、およびAndorid開発者が興味を持つ他のいくつかのグッズを作成できました。



一般的なプロジェクトのアーキテクチャとアプリケーション



当初から、Android用のアプリケーションを開発する際に最新のアプローチとデザインパターンをどのように使用できるかを理解したかったため、さまざまなフレームワークを研究するのに多くの時間がかかりました。 Android SDKには既にテストを整理するためのJUnitがあり、インターネット上でそれを使用する方法に関する多くの記事がありますが、実際のプロジェクトに関しては、落とし穴がすぐに現れます。 この一連の記事では、それらを克服する方法について説明します。



そこで、アプリケーションのすべての基本アルゴリズムがテストされるようにするために、TDDを使用することにしました。 そのため、ユーザーインターフェイスを設計するときにMVPパターンに決めました。



プロジェクト組織



私のソースは2つのプロジェクトに分かれています-ソースを含むメインプロジェクトとテストを含むテストプロジェクトです。



ソースプロジェクトは、いくつかのパッケージで構成されます。 原則として、1つのパッケージは1つのアーキテクチャリンク、つまり1つのフォームまたはサービスです。



各リンクは、いくつかのストリームを整理するために、原則としてプレゼンター、ビュー、および場合によっては補助クラスで構成されます。 ビューは常にユーザーインターフェイスではないことに注意してください。これらはシステムサービスを操作するためのクラスである場合がありますが、これらのシステムサービスをシミュレートできるようにするために、インターフェイスを持つビューに配置します。このインターフェイスはテストで簡単にシミュレートできます。



テストプロジェクトもパッケージに分割されます。 各パッケージには、対応するアプリケーションリンクのテストがいくつか含まれています。



アプリケーションアーキテクチャ



私のアプリケーションは小さいため、レイヤーはありませんが、いくつかのリンクしかありません。



1.メインウィンドウ

2.アラーム編集ウィンドウ

3.着信音選択ウィンドウ

4.通話中のウィンドウ

5.私の場合、データモデルはアラームのリストであり、モデルをデータベースに保存するためのリポジトリです。

6.システムメッセージを処理するサービス:時間Xの開始とスマートフォンのロード。



すべてのウィンドウとサービスは、リポジトリから受信したモデルでのみ機能します。 これにより、疎結合リンクで構成されるアーキテクチャが実現します。 モデルをシミュレートすることにより、各リンクを他のリンクから個別にテストできます。



また、モデル自体には次のアラームを計算するための複雑なロジックが含まれていますが、モデルは他のリンクに依存しないため、テストも簡単です。



このアーキテクチャでは、表現のみがテストされないままです。 しかし、それらのコードは通常非常に簡単です。 これは、メソッドのパラメーターをフォームコントロールにマッピングするだけです。 通常、このコードは「gaze」メソッドを使用してテストされます。 また、何らかの形のコントロールが入力されていないことがわかると、エラーが簡単に検出されます。



次の記事では、個々のリンクの実装の機能について詳しく説明するとともに、開発者の生活を楽にするツールを説明します。



他の記事を読む



-はじめに

-MVPおよび単体テスト。 ジェダイ・ウェイ

- ユーザーインターフェイス、テスト、AndroidMock

- データの保存。 ドメインモデル、リポジトリ、シングルトンおよびBDD

-サーバー側の実装、RoboGuice、テスト

-小さなタスク、設定、ロギング、ProGuard



All Articles