私は通常のSQLiteDB内にデータを保存するAndroidアプリケーションを開発しています。これらのデータを自分のアプリケーションのコンポーネント(アクティビティとサービス)および他のアプリケーションに公開する必要があります。
残念ながら、これらのデータをDBに格納する前、およびDBから取り出す前に、さまざまな、おそらく複雑な方法でこれらのデータを操作する必要があります。フィールドを編集したり、複数の行または複数の列からデータを集約したりする必要があります。つまり、多くのビジネスインテリジェンスプログラムと多くの統計プログラムによって実行されることがわかる典型的な「データマッサージ」を実行する必要があります。
これは、SQLiteDBだけでは少なすぎることを意味します。単純なCRUDよりもはるかに多くのことをしなければなりません。
コンテンツプロバイダーも解決策ではないようです。典型的なAndroidCPは、標準のCRUDと非常によく似たインターフェースを実装し、さらに重要なことに、常にカーソル(行と列で編成されたデータの一時テーブル)を返します。私のニーズには、SQLデータベースの非常に薄いラップアラウンドのように見えます。ビジネスロジックをCP自体の内部に配置できるかどうか、外部CPインターフェイス(「コンテンツ:...」)を拡張できるかどうか、そして天候に応じてこれをグッドプラクティスと見なすことができるかどうかを理解する必要があります。
たぶん、Androidサービスは私の機能を公開する方法を私に与え、SQLite DB(またはSQLIte DBを含むCP)をサービスに埋め込むことができます。これが解決策になるかどうか、そしてその方法を私はまだ理解する必要があります。
私が本当に必要としているのは、おそらく、RESTfulWebサービスのようなものでしょう。
- 私の「モノ」の中核にあるデータを格納するSQLDB
- 動詞(GET、PUT、POSTなど)と単数形/複数形の名前(「People」、「John Doe」など)を受け入れ、「オブジェクト」(必ずしも「Javaオブジェクト」である必要はありません。 JSONまたはXMLファイル/ストリーム)。このインターフェースは、外部から見える唯一のレイヤーになります。
- 真ん中、私の「ビジネスロジック」はデータを操作するために使用されていました。
もちろん、標準のCPはRESTful WSと非常によく似ており、私の問題の解決策になる可能性があります。CPがこれに十分な柔軟性があるかどうかはわかりません。たとえば、CPはGET / PUTのような要求のみを受け入れることができ、カーソル以外のものを返すことはできないように見えます。
では、アプリケーションのさまざまな部分(アクティビティ)や他のアプリケーションに、CRUD以外の機能と基本データだけを公開するために何を使用しますか?
ただのAndroidコンテンツプロバイダー(おそらくCP自体の中にビジネスロジックを書いています)?
SQL DBをラップアラウンドする(またはCPをラップアラウンドする)Androidサービス?
ほかに何か?
どのアーキテクチャが最もエレガントでしょうか(「保守可能」、「拡張可能」、「柔軟」、「オープン」)?このための「ベストプラクティス」はありますか?
あなたの考慮事項/提案?