我打算用Snap编写webapps。
但是使用snap-core对我来说比使用snaplet和镜头要简单得多。
从长远来看,是否可以继续使用snap init barebones
进行开发,然后手动添加heist模板,HDBC数据库持久性等,而无需借助镜头内容? Snap核心团队在实践中鼓励使用Snaplet以及snap-core有多强烈?
答案 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,但我个人强烈推荐它们。