我目前正在尝试开发一个可重复使用的 Yesod 子站点来处理用户到用户的消息传递。理想情况下,用户应该能够从 Hackage 下载这个包,在他们的应用程序中提供一些钩子,并在他们的 Yesod 主站点上拥有一个现代的、功能丰富的消息系统。
但是,我找不到任何引用主站点实体的子站点示例。在这种情况下,我想为可能从主站点引用用户的消息构建持久模型。
到目前为止,我发现的 Yesod 子站点教程都没有涉及在子站点中使用 Persistent。该耶索德-意见包是我找到想什么,我建最接近的事情,但我有点被它采用的方法混淆。
首先,它似乎使用字符串来识别用户,而不是直接使用用户的id,这似乎效率低下。
此外,它似乎需要一个奇怪的回调结构(persistStorage结构)来支持评论存储,但这对我来说似乎很奇怪。在我看来,在 Haskell 中,确定要调用哪个函数所需的所有信息都应该在类和实例级别完成,但在这种情况下,我依赖于传递一堆回调,以便我的代码才能正常工作。
所以这是对 Yesod 社区的一个问题:在 Yesod 中开发这些类型的通用子站点的最佳方法是什么?
我真的很喜欢在我的项目中使用 Yesod,因为我喜欢 Haskell 以及类型安全和静态编译带来的所有东西(更不用说速度和可扩展性的好处),但我不禁感到被拉向了动态框架,如 Django 和 Rails,其中不仅有一个生态系统来构建和分发可重用组件,而且还有构建这些组件的所有库内基础设施。
看看 yesod-auth 是如何实现的。本质上,YesodAuth类型类定义了需要提供的各种数据库操作,但实际上并没有实现它们。然后,您的子站点的用户可以实施它们,同时可以灵活地修改他/她需要的数据库架构。
如果在您的情况下,模式修改不是绝对必要的,您可以拒绝灵活性并简单地要求用户在数据库中使用您的数据类型。如果你想更进一步,你可以persistent在你的子站点中自己拨打电话,可能是这样的:
lift $ get404 userId
Run Code Online (Sandbox Code Playgroud)
如果您在执行此类操作时遇到具体问题,请提供代码和错误消息,以便更清楚地说明问题。