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表的指针。问题是,在我的 Android 应用程序中,我想根据登录用户显示fromto借记,但在我的适配器上只显示“未登录用户”用户。

我尝试or在 Parse 上进行查询以获取所有借方查询,但我无法包含 User 指针,因为or查询 Parse 不支持。

像这样:

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 供其使用,因此它应该可以工作。

但这对我来说似乎有点过分了。他们的示例将许多评论行的信息聚合到单个评级中,这应该会加快结果的传输。在您的情况下,您计算一个新列,您可以像您一样在客户端上计算它。

因此,我认为您当前的方法没有任何问题。我认为展示“对方”是你的适配器的工作并不奇怪。我将其称为视图逻辑,即如何向用户显示数据的选择。所以如果适配器需要显示“对方”,那么适配器需要知道要过滤掉两个用户中的哪一个。

为了进一步分离,您可以currentUser在适配器类中创建一个字段并将其填充到构造函数中或使用设置器。然后适配器不需要调用ParseUser.getCurrentUser()自己。例如,这可以帮助您为适配器创建单元测试。

如果您希望其余代码更加独立于 Parse.com,您可以创建某种数据访问对象来计算“另一方”列并将数据转换为非 Parse.com 对象。不过,对我来说似乎是另一种矫枉过正。

于 2014-12-22T02:03:52.233 回答