2012-05-08 2 views
1

最近私のAndroid携帯電話をコーディングしていましたが、私はこのインテントクラスが新しいプログラミングスタイルの概要になっているのだろうかと疑問に思っていますか?Androidプログラミングスタイル

私は、APIデザインがMVCを嫌うと疑っています。インテントは、すべてのユーザー関連オブジェクト(アクティビティ、サービス、その他のアプリケーション...)とやりとりする主な方法です。

私の列車は正しいのですか?ビジネスロジックの「汚染」活動に固執する必要がありますか?

私はアンドロイドデベロッパーサイトを読んでいますが、特定のコーディングスタイルは奨励されていません。あなたがプログラムアーキテクチャスタイルコーディング混乱しているように見えるので、

+0

私はそれを簡単に保つ方法だと思っています。本当のシンプル。 – keyser

+1

これは本当の質問ではありません –

+0

@Alex私は質問としてそれを表現していないかもしれませんが、それは確かに一つです。 – Machinarius

答えて

1

私はこのOReilly bookから次のアイデアを多く取りました。これはちょうど私のために最もよく働いたものです。

は限りアーキテクチャが行くように、その私はPage ControllerパターンとしてAndroidのUIを考えるのを助けた - 私はそれが実際には.NET Webフォームに類似していることが判明しました。だから、それはMVC(少なくともページコントローラーの味)に適合します。アクティビティはコントローラであり、通常はXMLでビューを保存しますが、好きなようにモデルを構築できます。

あなたはAndroidで多くのWeb-ishアイデアを見ることができます。インテントは、HTTP、またはより一般的にはRESTによく似ています。インテントには、明示的なクラス宣言(具体的なアクティビティへ行く、またはインテントフィルタを使用してより暗黙的にすることができます)が関係する「名詞」があります。アクションはHTTP動詞とよく似ています、など)、バンドルはクエリ文字列パラメータやペイロードのリストのようなものです。

ウェブページと同様に、アクティビティが自分自身を世話できるようにしたいとします。私が言っていることは、アクティビティからアクティビティへの大きなシリアライズされたオブジェクトを渡したくないということです。そのクリーナー/復元力/信頼性は、特定のレコードのIDを次のアクティビティに渡して、 db(ContentProvider、その他の永続的なソース...)からそのIDで記録します。アクティビティーも疎結合を意図しており、さまざまなパスから1つにナビゲートできるようになっているはずです。また、それらを再利用可能にします。したがって、アクティビティの呼び出し元がrecordIdを提供するだけで、消費者が大きなシリアライズされたオブジェクトを提供することを期待するアクティビティがずっと簡単になります。

ボトムライン - いいえ、ビジネスロジックを使用したアクティビティを汚染する必要はありません。アプリケーションレイヤーやゲートウェイなどに埋め込む必要はありません。永続性については、ContentProviderインターフェイスはかなりうまく設計されています。私はそれが大好きです。 Android RESTfulテーマを継続し、URLや動詞(クエリ、削除、更新、挿入)を介してコンテンツにアクセスします。

+1

この回答を本当に好きな人は、その本も読んでいます。 O'Reillyの本は素晴らしいです。ヒントをありがとう。 – Machinarius

3

あなたの質問は、完全には明らかではありません。

私の考えでは、Androidは実際にはコーディングスタイルに関して何も変わりません。 Javaのコーディングスタイルは引き続き問題なく動作し、ほとんどのAndroidアプリは他のアプリとよく似ています。要約すると、Androidでやりたいことがいくつかありますが、他の言語ではそれほど多くはありません。see the Android guide for details.基本的な考え方は次のとおりです。メモリが限られているため、使用しないでください。

プログラムのアーキテクチャ全体がそうである限り、Androidスタイルは、(Intentオブジェクトを通じて)メッセージの受け渡しを基盤としています。 GUIイベントに反応する方法アクティビティはまだ変わりません。イベントハンドラを使用してボタンプレスなどのイベントに反応します。しかし、このプラットフォームは、さまざまなコンポーネント(アクティビティ、サービス、BroadcastReceivers、etc ...)と、それらの間で通信するインテント。インテントはコンポーネント間でデータを交換する柔軟な方法を提供しますが、インテント内に大量のデータを渡すべきではありません。そのようなものをContentProviderなどに配置する必要があります。

+0

具体的には、サービスにバインドする必要があります。コントローラを追加したいと思います。自分の考えを変え、レイアウトやサービス自体を他のものに再利用する必要があります。目的。コントローラーがアクティビティーをすべてビューに押し込むことはできません(それには文脈が必要です)。このパターンは壊れていて、サービスとすべてのアクティビティーを調整する負担があります。これは期待される? – Machinarius

1

意向送信側と受信側は送信と登録(パブリッシュ・サブスクライブチャンネルに類似する)コマンドメッセージのために(例えば、分散型エンタープライズアプリケーションでは、このアーキテクチャではなく、スタイルについてである)のようなくらいです。このパターンは、相互作用するアプリケーションの疎結合システムの設計に役立ちます。
1つのコンピュータでコンポーネントとアプリケーションのやりとりに使用する前に、類似のアーキテクチャを見たことはありませんが、他のアプリケーションを使用してアプリケーションを設計すると、簡単に機能/コンポーネントのエコシステムを構築できます。

+0

だから私はそれを正しくしている、あなたはインテントがサービス契約であると言っていますか? Aは機能を探してインテントを開始します。 Bはそのような意図を実装しているため、AndroidはBにAの要件を提供するように電話をかけますか? – Machinarius

+0

基本的にはいですが、提供されたサービスに関する情報はありませんが、アクションの名前はありません。契約は強制されておらず、関連するセキュリティポリシーはありません。 – Stefan

関連する問題