【问题标题】:Keeping track if objects is posted to server or not (like snapchat)跟踪对象是否已发布到服务器(如 snapchat)
【发布时间】:2016-04-09 19:22:46
【问题描述】:

我似乎无法理解一个好的设计,它允许用户创建一个对象、保存到数据库并跟踪该对象是否已发布到服务器。

就像在 snapchat 中一样 - 在离线时,您可以创建一个包含图片和接收者的快照对象,按发送,它会显示在快照列表(表格视图)中,但如果设备离线,请求会超时或失败,它会显示一个红色的感叹号,您可以选择单元格重试。

进行类似设计的好方法是什么?有任何想法吗?

提前致谢!

【问题讨论】:

    标签: ios swift design-patterns networking snapchat


    【解决方案1】:

    我想看看 Parse Server 之类的服务。如果您不知道它是什么,它是一个开源服务器,您可以将其挂载(放置)在 Heroku 或 Amazon AWS 等服务上。当您使用 Parse SDK 将数据保存到服务器时,您可以选择创建一个块来处理是否发生错误或成功等于 true。您可以观看有关如何在 Heroku 等上设置 Parse Server 的 YouTube 视频。从那里开始,所有旧的“解析”视频将几乎保持不变,即使它们正在关闭(因此是开源项目)。此外,您可以使用 Reachability 来检测用户是在线还是离线 - 同样,您可以找到 YouTube 视频来了解如何做到这一点。

    【讨论】:

    • 感谢您的回答丹!我并不是真的在寻找简单的出路。我正在寻找一种简洁的设计方法来解决这个问题,最好是一种设计模式。
    【解决方案2】:

    我曾开发过类似的应用程序。这个想法是你如何构建你的数据库。在这种情况下,与表中的所有其他属性一起添加一个属性,例如 isSent,它是一个布尔值。默认情况下,这应该是 false,并且只有在服务器上更新时才应该设置为 true。

    这将有助于找出哪些项目未同步到服务器并仅发送那些 isSent 为 false 的项目。

    现在,一旦项目在服务器上更新,您的应用将如何获知?为此,您的服务器应该发回您发送的请求以及每个请求的成功消息。您的请求可以是一组项目,也可以是单个请求,具体取决于要求。

    Azure 同步表也以同样的方式工作。当您第一次创建一个项目时,它存储在您的离线数据库中,isSent 为 false,然后该请求被发送到服务器,当服务器发送成功时,isSent 更新为 true。

    让我们看一个例子: 假设您正在离线评论。每条评论将被视为单独的项目。因此,当您连接到互联网时,这些所有请求都将被发送,并且每个项目都有其唯一的 ID 以与其他项目区分开来。您上传到服务器的请求将是:

    [
        {
            "unique_id" : 1,
            "Comment" : "Hello"
        },
        {
            "unique-id" : 2,
            "Comment" : "How r u"
        }
    ]
    

    现在服务器的响应应该是:

    [
        {
            "unique_id" : 1,
            "Status" : "success"  
        },
        {
            "unique_id" : 1,
            "Status" : "failed"  
        }
    ]
    

    解析您的回复并根据状态相应地更新您数据库的 isSent 列。

    【讨论】:

    • 感谢您的回答阿伦。当对象尝试发送自身以及失败与否时,您将如何获得通知?还有谁负责发送对象?我一直在阅读命令模式,这是否适合这个问题?
    • 基本上你需要观察互联网连接或在启动时检查是否有任何未同步的数据。开发人员必须管理如何以及何时发送。它应该是模式的组合 - 通知,单例。用示例场景更新了我的答案。
    猜你喜欢
    • 1970-01-01
    • 2018-02-01
    • 1970-01-01
    • 2011-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多