私は、AndroidとBlackberryの両方で(将来的にはJavaMEに)利用できるようにしたいアプリを開発しています。ビジネスロジックはすべてのプラットフォームに共通しているため、コード内の対応するレイヤーも同様になります。Androidと他のプラットフォーム用のアプリケーション間でのロジックコードの再利用:ContentProviderまたはContentProviderには?
しかし、私はまた、明らかにさまざまなプラットフォームとは異なるデータレイヤーを持っています。私のアプローチは、Beanと抽象データストアクラスを持つことです。私はAndroidのメモ帳のサンプルを使用していた場合、それは次のようになります。
注豆:
public class Note {
private long id;
private String title;
private String note;
private long created;
private long modified;
//Appropriate constructors
//Getters and Setters
}
データストアインタフェース:
public interface NoteDataStore {
public boolean deleteNote(long noteId);
public boolean addNote(Note note);
public List<Note> listNotes();
public boolean editNote(long noteId, Note note);
public List<Note> search(String searchString);
}
すべてのプラットフォームが実装しを必要に応じて永続データアクセスを実行します。たとえば、Androidの実装では、この目的でSQLiteクラスを使用します。
このように、プラットフォーム固有の機能を使用しない限り、上位層のレイヤーはすべてのプラットフォーム共通です。
質問:
アンドロイドでContentProvider
のものと(部分的に)重複上記データストアの機能はないのですか?私は、この「きれい」を作るために様々なアプローチを考えたが、私はそれらのいずれかと確信していない:
私
ContentProvider
もデータストアインタフェースを実装してもらいます。 しかし、これによってContentProviderが乱雑になるのではなく、責任を「ミックスアップ」していませんか?ContentProvider
でSQLiteアクセスを実装して、DataStore実装でContentProviderを「呼び出し」するようにしてください。 しかし、追加レイヤーのオーバーヘッドはどうですか?さらに、私はContentProviderを直接使用する必要があります。たとえば、Android Search Frameworkを使用する場合などです。それは複数のレイヤーで同じ機能を複製するようなものではありませんか?上記のアプローチの逆です。つまり、SQLiteをデータストアレイヤーに実装します。カバーの下に
ContentProvider
の電話をかけてください。これが以前のアプローチとどのように違うのか、私は考えることができません。
ボトムラインがある - それはContentProvider
のためではなかった場合 - ちょうどデータストア層が正常に動作しますと、このデザインは、プラットフォーム間でのビジネス・ロジックを再利用可能になるだろう。私がContentProvidersを完全に破棄できない唯一の理由は、Androidシステムの特定のコンポーネントが、ContentProvider(Searchなど)としてデータを公開することを期待していることです。
あなたのアプリでこれをどのように処理したかに関するヒントをお寄せいただきありがとうございます。前もって感謝します。
EDIT:
多くの未応答これまでのところ。さまざまなプラットフォーム間でのコードの再利用に関するヒントまたは、おそらく、私は自分の質問を書き直す必要がありますか? (申し訳ありません - 私は新しいので、プロトコルは "リマインダー"のためのものではありません)。
実際のコードの再利用の程度はビジネスロジックに依存していると言えます。私はアンドロイド、BB&JavaMEの味を持っていた連絡先の同期アプリケーションに取り組んだ。 UIのContact/HTTPレイヤーは各プラットフォーム固有のものでしたが、コードではコア同期レイヤーも共通でした(JARライブラリとして3つすべてのフレーバに配布されました)。このシンクレイヤーは、(設計労力とコードの点で)アプリの「大量の」ものでした。 私の主張は、ビジネスロジックがコードの再利用が可能であるだけでなく有利な場合もあるということです。 – curioustechizen