2014-03-14 23 views
3

我目前正在嘗試開發一個可重用的Yesod子網站來處理用戶到用戶的消息傳遞。理想情況下,用戶應該能夠從Hackage下載這個軟件包,在他們的應用程序中提供一些鉤子,並且在他們的Yesod主站點上有一個現代的,功能強大的消息系統。在Yesod子網站中正確使用持久性?

但是,我無法找到引用主站點的實體子網站的任何實例。在這種情況下,我想爲可能從主站點引用用戶的消息構建持久模型。在耶索德子網站的教程

無我發現迄今處理的子網站使用持久。 yesod-comments包是我發現的最接近我想要構建的東西,但我對它採取的方法感到困惑。

首先,它似乎使用字符串來識別用戶,而不是用戶的ID直接,這似乎是低效的。

此外,它似乎需要一個奇怪的回調結構(persistStorage結構)以支持評論存儲,但這對我來說似乎很奇怪。在我看來,在Haskell中,找出調用哪個函數所需的所有信息都應該在類和實例級別完成,但在這種情況下,我依靠傳遞一堆回調來爲我的代碼正常工作。

所以這裏的耶索德社區一個問題:什麼是開發這些在耶索德各種通用的子網站的最佳方式?

我真的很喜歡在我的項目中使用Yesod,因爲我喜歡Haskell以及類型安全和靜態編譯帶來的所有東西(更不用說速度和可伸縮性的好處),但我忍不住感覺像Django和Rails這樣的動態框架,不僅有一個生態系統來構建和分發可重用組件,而且還包括構建這些組件的所有庫內基礎設施。

回答

3

看一看耶索德-auth的是如何實現的。實質上,類型類型是YesodAuth,它定義了需要提供的各種數據庫操作,但實際上並未實現它們。然後,您的子網站的用戶可以實現它們,同時可以靈活地修改數據庫架構,無論他/她需要什麼。

如果你的情況,架構修改不是絕對必要的,您可以調低靈活性和簡單地要求用戶在數據庫中使用的數據類型。如果你想走得更遠,你可以讓persistent要求自己在你的子網站,可能喜歡的東西:

lift $ get404 userId 

如果你正在運行到具體問題與做類似的東西,請提供代碼和錯誤消息,所以問題更清楚。