18

アンドロイドアプリの優れたアーキテクチャはどのように見えますか?すべての "仕事/ビジネスロジック"はバックグラウンドサービスで実行され、アクティビティはサービスとちょうど通信してどこか(ローカル/遠方)のデータをクエリ/フェッチしますか?Androidアーキテクチャの設計 - それを正しく行うにはどうすればいいですか?

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

どのようにデータアクセスを適切に抽象化しますか? ContentProviderを使用してデータにアクセス/抽象化しますか?どこから問合せを受けるべきですか?アクティビティ?サービス? ..?

私は優れたアプリアーキテクチャ設計を探してみましたが、Androidアプリの外観はどのように見えますか?

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

答えて

15

この質問には答えはありません。良いオブジェクト指向設計はAndroid固有のものではありません。私は、フレームワークがあなたのユースケースに合った高水準のオブジェクト(Androidの場合のようなサービス)を提供するならば、ルールを使用していると言いたいと思います。フレームワークを使って自由に取得したものと同じものをPOJOで実装している場合は、そのフレームワークを参照してください。

懸念の分離に関して、これは標準的なオブジェクト指向のものです。あなたのアクティビティクラスには、アクティビティの仕事ではないものを入れないでください。アクティビティに必要なメソッドやプロパティは、実際にアクティビティの仕事ではなく、悪いものであり、アクティビティの意図を理解しにくくします。

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

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

等限り通信Wとして

あなたのアプリには...

私は常にマニフェストに登録するカスタムアプリケーションクラスを持っています。このようにして、コントローラとヘルパーが「単一のインスタンス」である必要がある場合、スレッドセーフなシングルトンのものをすべて行う必要はありません。

RoboGuiceはこれをさらに簡単に達成するための依存性注入フレームワークです。これが興味のある場合、RoboGuiceのGoogleグループは素晴らしいですし、基本的に必要なものに基本的に答えることができるフレームワークのクリエイターで常に満たされています。

限り、アプリ内コミュニケーション、私は状態を保持するために、私の単一インスタンス・コントローラと国家クラスを使用して一般的なタスクを行う、と私は通常サービス

+0

から活動に戻って、あなたが使用する理由の任意の特定の理由を伝えるためにBroadcastIntentsを使用BroadcastIntentsはハンドラではなくサービスからのアクティビティに返信しますか? – KL4711

+2

特にありません。私の活動はonPauseで放送意図の受信者を登録解除することができるので、私のサービスは情報をブロードキャストでき、アクティブなアクティビティだけが受信者を登録していれば受信します。私はその断絶された性質が好きです。ハンドラがサービス内のアクティビティへの参照を保持せずに同じ処理を実行できる場合、ハンドラは単にそれを認識しません。 – Rich

+0

@Rich:それはしばらくあなたがこれに答えているので!あなたはこの期間にわたってこのアーキテクチャの事柄を詳しく説明するオンラインリソースを見つけましたか? –

関連する問題