1

Parse.com ドキュメントでこのアーキテクチャ上の問題に取り組んでいます。Debit と呼ばれる次の「スキーマ」があります。

"createdAt": "2014-12-12T02:31:06.026Z",
"creator": {
    "__type": "Pointer",
    "className": "_User",
    "objectId": "objectId"
},
"date": {
    "__type": "Date",
    "iso": "2014-12-12T02:31:14.437Z"
},
"debitStatus": 0,
"description": "Gdfvgg",
"from": {
    "__type": "Pointer",
    "className": "_User",
    "objectId": "Sd9B1XyZVL"
},
"has_accepted": false,
"objectId": "objectId",
"to": {
    "__type": "Pointer",
    "className": "_User",
    "objectId": "objectId"
},
"updatedAt": "2014-12-12T06:00:46.528Z",
"value": "6.48"

from と to の「列」は、_Userテーブルへのポインタです。from問題は、私の Android アプリでは、ログに記録されたユーザーに応じてとデビットの両方を表示したいのですtoが、アダプターでは「ログに記録されていないユーザー」ユーザーのみを表示することです。

Parse でクエリを実行してすべての借方クエリを取得しようとしましたが、orクエリで Parse がサポートされていないため、ユーザー ポインターを含めることができorません。

このような:

ParseQuery<ParseObject> query1 = new ParseQuery<ParseObject>("UserBalance");
query1.whereEqualTo("user_from", ParseUser.getCurrentUser());
ParseQuery<ParseObject> query2 = new ParseQuery<ParseObject>("UserBalance");
query2.whereEqualTo("user_to", ParseUser.getCurrentUser());

ParseQuery<ParseObject> query = ParseQuery.or(Arrays.asList(query1, query2));

しかし、問題は「私ではない」アダプターを表示するときです。

アダプタ:

 ParseUser user = null;
 ParseUser user1 = (ParseUser) object.get("user_to");
 if (user1 == ParseUser.getCurrentUser())
     user = (ParseUser) object.get("user_from");
 else
     user = user1;

もちろん、ユーザーをフェッチする必要がありますが、これはアダプターではお勧めできません。それで、データベース側でこれを改善するためのより良いアプローチはありますか?

ありがとう

4

1 に答える 1

0

Parse はデータベースであり、API はデータベース内のレコードをそのまま送信します。回線の Parse.com 側でトランザクションの「相手方」を計算する場合は、Parse.comクラウド関数を作成できます。関数は現在のユーザーに提供され、JavaScript API 全体を自由に使用できるため、機能するはずです。

しかし、それは私にはやり過ぎに思えます。彼らの例では、多くのレビュー行の情報を 1 つの評価に集約し、結果の伝達を高速化する必要があります。あなたの場合、あなたと同じようにクライアント上で計算できる新しい列を計算します。

したがって、現在のアプローチに問題はないと思います。「相手」を表示するのがアダプタの仕事であることはおかしくないと思います。ユーザーにデータを表示する方法の選択であるビュー ロジックと呼びます。したがって、アダプターが「相手」を表示する必要がある場合、アダプターは 2 人のユーザーのうちどちらを除外するかを知る必要があります。

物事をもう少し分離するcurrentUserには、アダプター クラスでフィールドを作成し、コンストラクターで入力するか、セッターを使用します。その後、アダプタは自分自身を呼び出す必要はありませんParseUser.getCurrentUser()。これは、たとえば、アダプターの単体テストを作成するのに役立ちます。

コードの残りの部分を Parse.com からより独立させたい場合は、「相手」列を計算し、データを非 Parse.com オブジェクトに変換するある種のデータ アクセス オブジェクトを作成できます。しかし、私には別の種類のやり過ぎのように思えます。

于 2014-12-22T02:03:52.233 に答える