3

我打算用 Snap 编写 webapps。

但对我来说,坚持使用 snap-core 比使用 snaplets 和 lens 要简单得多。

从长远来看,是否可以在不借助 Lens 的情况下手动开始开发snap init barebones然后添加抢劫模板、HDBC 数据库持久性等?Snap 核心团队在实践中鼓励使用 Snaplets 和 snap-core 的力度有多大?

4

2 回答 2

2

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

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

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

于 2012-12-03T18:17:35.357 回答
1

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

我认为坚持使用一点也不snap-core简单,我认为您将产生更多令人困惑的代码,因为您现在必须编写对您的应用程序不重要的东西。

是我为工作中的项目设置基本 snaplet 的一个非常简单的示例 - 仅 40 行代码。你所知道的关于 snap-core 的一切仍然适用于 snaplets(因为处理程序是 的实例MonadSnap)。

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

于 2012-12-01T18:33:25.513 回答