在Yesod子网站中正确使用Persistent?

时间:2014-03-14 04:27:06

标签: haskell yesod

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

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

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

首先,它似乎使用字符串来识别用户,而不是直接识别用户的ID,这似乎效率低下。

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

所以这是Yesod社区的一个问题:在Yesod中开发这些通用子网站的最佳方法是什么?

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

1 个答案:

答案 0 :(得分:3)

看看yesod-auth是如何实现的。本质上,有YesodAuth类型类定义了需要提供的各种数据库操作,但实际上并没有实现它们。然后,您的子网站的用户可以实现它们,同时可以灵活地修改数据库模式,无论他/她需要。

如果在您的情况下,架构修改不是绝对必要的,您可以调低灵活性并只需要用户在数据库中使用您的数据类型。如果你想更进一步,你可以自己在你的子网站上进行persistent电话,可能是这样的:

lift $ get404 userId

如果您遇到类似问题的具体问题,请提供代码和错误消息,以便更清楚地解决问题。