在Sinatra之上构建MVC结构

时间:2011-02-25 09:39:41

标签: ruby model-view-controller sinatra

我正在学习Sinatra,我想知道是否有人知道为Sinatra的项目制作MVC结构的好方法。我有一些想法,但对我来说似乎太麻烦了。

3 个答案:

答案 0 :(得分:24)

Sinatra已经是“VC” - 你有从你的路线(控制器)分开的视图。如果您愿意,可以选择将其分成多个文件;有关更多信息,请参阅此答案(我的):
Using Sinatra for larger projects via multiple files

要添加“M”(模型),请选择数据库框架。有些人喜欢ActiveRecord。有些人喜欢DataMapper。您可以选择更多。我个人喜欢并强烈推荐Sequel。我在上面链接的答案也提出了一个包含模型的目录结构和shell。一旦在模型和控制器之间分配适当的逻辑,就会得到“MVC”。

请注意,MVC不是关于单独的文件,而是关注点的分离。如果您按照我的建议设置Sinatra应用程序,但是您的视图从模型中获取数据,或者您的路由直接生成HTML(而不是通过“helper”),那么您就不要真的有MVC。相反,您可以在单个文件中执行上述所有操作,并且仍然具有MVC应用程序。只需将数据完整性逻辑放在模型中(更重要的是,放在数据库本身中),您的视图中的表示逻辑和可重用的帮助程序,以及控制器中的映射逻辑。

答案 1 :(得分:6)

如果您还没有,那么值得一看Padrino框架,它提供了一组扩展Sinatra的组件。您可以使用部分或全部Padrino,或者只是看一下项目开发人员如何处理事情。

答案 2 :(得分:4)

M 很容易 - 使用ActiveRecord(或其他)。我有一个models子目录,当我的Sinatra应用加载时,其内容为require

V 也很简单 - 只需将您的观点放在views子目录中 - Sinatra会自动查看。

我猜,

C 可以通过将适当分组的Sinatra操作放入单独的文件并在运行时加载它们来处理。

(忏悔:我还没有构建一个足够复杂的Sinatra应用程序,看不到需要显式控制器 - 需要那么多的结构我已经开始使用Rails了)