Snaplet是否适用于较大的应用程序,或者您是否可以直接在snap-core上构建?

时间:2012-12-01 17:04:22

标签: haskell haskell-snap-framework

我打算用Snap编写webapps。

但是使用snap-core对我来说比使用snaplet和镜头要简单得多。

从长远来看,是否可以继续使用snap init barebones进行开发,然后手动添加heist模板,HDBC数据库持久性等,而无需借助镜头内容? Snap核心团队在实践中鼓励使用Snaplet以及snap-core有多强烈?

2 个答案:

答案 0 :(得分:2)

正如ocharles所说,你可以在不使用snaplet的情况下在snap-core中构建大型Web应用程序。但是,snaplet是根据我们对真实应用程序的体验直接开发的。我们观察到我们最终总是编写了很多相同的样板文件。对于几乎任何足够复杂的应用程序,我们发现您通常至少需要一个读者和/或状态monad。事实上,即使你只使用snap-core + heist,你也很有可能开始想要它,因为你必须在你使用它的任何地方传递HeistState。

所以我会说snap和snap-core之间的选择大致相当于C和汇编语言之间的选择。有人可能会说C有这些复杂的概念,比如“for”和“while”,但汇编语言只是简单的jmp概念就简单明了。但最后我们都知道C似乎值得认知开销,因为“for”和“while”体现了我们一直使用的模式。

但是,我会说你很有可能无需编写自己的snaplet即可构建大型Web应用程序。现在有许多有用的snaplet可以处理许多常见任务,你可以使用它们中的任何一个而无需实际编写自己的独立snaplet。编写自己的snaplet的唯一好处是,如果您将在多个Web应用程序中使用它,或者如果您想要发布它以便其他人可以受益。

答案 1 :(得分:1)

当然可能但我不推荐它。 Snaplets为您提供了大量的管道,基本上是免费的 - 而且它们不需要太多工作就可以开始。如果你要手动滚动HDBC支持和东西,那么你可能想拥有自己的monad和MonadSnap的实例。我敢打赌,这已经比首先使用snaplet更复杂了。

我认为坚持使用snap-core更简单,我认为你会产生更多令人困惑的代码,因为你现在必须写东西这对你的申请来说并不重要。

Here是我为工作项目设置基本snaplet的一个非常简单的例子 - 只有40行代码。关于snap-core的所有知识仍然适用于snaplet(因为处理程序是MonadSnap的实例)。

所以不 - 你不必使用snaplet,但我个人强烈推荐它们。