我如何找出 Angular 2/Ionic 2 应用程序的数据模型

How do I figure out Data Model for Angular 2/Ionic 2 application

我正在使用 Typescript 在 Angular 2/Ionic 2 中开发旅行应用程序。我需要弄清楚如何为我的服务/对象建模。这个应用程序将有用户。

每个用户都可以创建一个整体行程。您可以将其命名为 "Europe 2016." 然后您可以添加多天。他们可能要旅行 14 天。他们每天都可以计划当天要做什么,包括 activity 几点钟、activity 在哪里等等……他们还可以查看天气、添加酒店信息等每一天。

大概看起来像(对不起,这很难看)

Trip: {
  "name": "Europe 2016",
   "tripPlans": [
    {"day1": [{plan1: do something, time: 01000}, {plan2: do something else, time: 01000}}], "time": "0800", "date":"09/01"2016, hotel, weather},
    {"day2": [{plan1: do something, plan2: do something}], "time": "0800", "date":"09/01"2016, hotel info, weather info}
    ]
}

还需要知道旅行的开始日期和结束日期。

我也可能想返回并查询用户组认为流行的内容,例如"most common activity in Gotham"

这是我花了 100 个小时学习编码后的第一个主要应用程序,它是我的个人项目,让我对学习感到兴奋。它解决了我的个人问题。我已经到了很难找到好的 examples/resources 来帮助我解决这个问题的地步。

我在框架选择上花费了很多时间,所以我想坚持下去。到目前为止,我已经着手尝试使用 PouchDB/CouchDB。我目前只在 Ionic 中构建移动版本。

任何建议将不胜感激,即使它是 github 要查看的项目、您已保存的教程等。

我主要使用 CouchDB,但我也开始使用 PouchDB/CouchDB 开发 Ionic 应用程序。首先,您需要知道当您有很多嵌套文档时 NoSQL 很好,但有时您无法选择 "relations".

首先,我对您的数据模型做了一些修改:

{
    "name": "Europe 2016",
    "type": "trip",
    "tripPlans": [{
        "name": "This is the first plan",
        "days": {
            "day1": [{
                "registeredActivityId": null,
                "plan": "do something",
                "time": 1000
            }, {
                "registeredActivityId": "activty_goToTheMoon",
                "plan": "Go to the moon and the previous activity",
                "time": 1000
            }],
            "time": "0800",
            "date": "09/01/2016",
            "hotel": "Hotel name",
            "weather": "Sunny"
        }
    }]
}

现在,您的选择不多了:

  1. 您可以像这样在嵌套活动上构建视图

     function(doc) {
    if (doc.type == "trip" && doc.tripPlans && doc.tripPlans.join)
        for (var i = 0; i < doc.tripPlans.length; i++) {
            var plan = doc.tripPlans[i];
            if (plan.days)
                for (var n in plan.days)
                    if (plan.days.hasOwnProperty(n)) {
                        var day = plan.days[n];
                        //We emit the activity id for a better tracking.
                        //If it's not available, we emit the description(not recommanded)
                        emit(day.registeredActivityId ? day.registeredActivityId : day.plan);
                    }
        }
    

    }

  2. 您可以在文档之间建立关系

如果经常计算视图,使用嵌套方法可以加快查询速度。否则,"relational approach" 使 link "predefined activities" 更容易。如果您需要更多信息,可以私下联系我。