【问题标题】:Properly using Persistent in a Yesod subsite?在 Yesod 子站点中正确使用 Persistent?
【发布时间】:2014-04-19 05:16:34
【问题描述】:

我目前正在尝试开发一个可重复使用的 Yesod 子站点来处理用户对用户的消息传递。理想情况下,用户应该能够从 Hackage 下载这个包,在他们的应用程序中提供一些挂钩,并在他们的 Yesod 主站点上拥有一个现代的、功能丰富的消息传递系统。

但是,我找不到任何引用主站点实体的子站点示例。在这种情况下,我想为可能从主站点引用用户的消息构建持久模型。

到目前为止,我发现的 Yesod 子站点教程都没有涉及在子站点中使用 Persistent。 yesod-comments 包是我发现的最接近我想要构建的东西,但我对它所采用的方法有点困惑。

首先,好像是用字符串来识别用户,而不是直接用用户的id,这样似乎效率低下。

此外,它似乎需要一个奇怪的回调结构(persistStorage 结构)来支持评论存储,但这对我来说似乎很奇怪。在我看来,在 Haskell 中,确定调用哪个函数所需的所有信息都应该在类和实例级别完成,但在这种情况下,我依赖于传递一堆回调以便我的代码才能正常工作。

所以这里向 Yesod 社区提出一个问题:在 Yesod 中开发这类通用子网站的最佳方式是什么?

我真的很想在我的项目中使用 Yesod,因为我喜欢 Haskell 以及类型安全和静态编译带来的所有东西(更不用说速度和可伸缩性的好处),但我不禁感到转向动态框架,如 Django 和 Rails,不仅有构建和分发可重用组件的生态系统,还有构建这些组件的所有库内基础设施。

【问题讨论】:

    标签: haskell yesod


    【解决方案1】:

    看看 yesod-auth 是如何实现的。本质上,YesodAuth 类型类定义了需要提供的各种数据库操作,但实际上并未实现它们。然后,您的子站点的用户可以实现它们,同时可以根据自己的需要灵活地修改数据库架构。

    如果在您的情况下架构修改不是绝对必要的,您可以降低灵活性并简单地要求用户在数据库中使用您的数据类型。如果您想走得更远,您可以在您的子网站中自己拨打persistent,可能是这样的:

    lift $ get404 userId
    

    如果您在执行此类操作时遇到具体问题,请提供代码和错误消息,以便问题更清晰。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-15
      • 2015-06-30
      • 2012-06-14
      • 2018-01-23
      相关资源
      最近更新 更多