18

Androidアプリの優れたアーキテクチャはどのように見えますか?すべての「作業/ビジネスロジック」はバックグラウンドサービスで実行する必要があり、アクティビティはサービスとのみ通信して、どこか(ローカル/遠隔)からデータをクエリ/フェッチする必要がありますか?

アクティビティが呼び出す「サービス」を実際のAndroidサービスとして実装しますか?または、作業を行うPOJO-Singleton(おそらくバックグラウンドスレッドを使用)。または、時間のかかるアクションのためにアクティビティのバックグラウンドスレッドをインスタンス化します(Webサービスにクエリを実行します)。

データアクセスを正しい方法で抽象化するにはどうすればよいですか?ContentProviderを使用してデータにアクセス/抽象化しますか?どのように/どこからクエリする必要がありますか?アクティビティ?サービス?..?

優れたアプリアーキテクチャデザインを検索しようとしましたが、Androidアーキテクチャがどのように見えるかだけがわかり、Androidアプリがどのように見えるかはわかりませんでした。

それで、それについてあなたの意見は何ですか?最高の拡張性/カプセル化を保証するために、Androidアプリケーションのどのコンポーネントが相互に通信する必要がありますか?

4

1 に答える 1

15

この質問に対する答えはありません。優れた OO 設計は、Android 固有のものではありません。ルールは、フレームワークがユースケースに合った高レベルのオブジェクト (Android の場合は Service など) を提供する場合は、それを使用することです。フレームワークで無料で入手できるものと同じものの POJO 実装を作成していることに気付いた場合は、フレームワークを使用してください。

関心の分離に関する限り、これは標準的な OO のものです。アクティビティの仕事ではないアクティビティ クラスには何も入れないでください。アクティビティが必要としているが実際にはアクティビティの役割ではないメソッドやプロパティをアクティビティに詰め込みすぎると、アクティビティの意図がわかりにくくなります。

私は通常、アプリ内のサブパッケージに物を分けています。

  • com.myname.myproject.app - 基本クラス、グローバル アプリケーション機能
  • com.myname.myproject.net - ネットワーク関係、ネットワーク関連のユーティリティ
  • com.myname.myproject.data - db ヘルパー、プロバイダーなど
  • com.myname.myproject.model - オブジェクト モデル

アプリ内の通信に関しては...

私は常に、マニフェストに登録するカスタム Application クラスを持っています。このように、「単一インスタンス」である必要があるコントローラーとヘルパーがある場合、クレイジーなスレッド セーフなシングルトン処理をすべて実行する必要はありません。1 つのグローバル コピーを保持するだけです。

RoboGuiceは、これをさらに簡単に実行できるようにする依存性注入フレームワークです。検討する価値は間違いありません。これに興味があるなら、RoboGuice の Google グループは素晴らしく、基本的に必要なことは何でも答えることができるフレームワークの作成者で常にいっぱいです。

アプリ内通信に関しては、単一インスタンスの Controller クラスと State クラスを使用して状態を保持し、一般的なタスクを実行します。通常、BroadcastIntents を使用してサービスからアクティビティに通信します。

于 2011-02-23T16:14:08.797 に答える