【问题标题】:Build MVC structure on top of Sinatra在 Sinatra 之上构建 MVC 结构
【发布时间】:2011-07-04 04:38:40
【问题描述】:

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

【问题讨论】:

  • 我可以建议使用另一个框架来代替开箱即用的 MVC 吗?例如,拉马兹。
  • 是的,这是一个很好的错字。但我想学习HOW 来制作一个简单的框架。我想做这个教学练习来提高我的知识,因为我想知道引擎盖下发生了什么。我认为这对 Web 开发人员来说非常重要。我选择 Sinatra 是因为它是 rack 上最简单的包装器,并且可以为我的需求提供最大的灵活性。

标签: ruby model-view-controller sinatra


【解决方案1】:

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

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

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

【讨论】:

  • +1 “请注意,MVC 不是关于单独的文件,而是关注点分离” 它也不是关于单独的类。就像你说的,每条路由都是一个控制器。
【解决方案2】:

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

【讨论】:

  • 谢谢斯图尔特,我去看看。拥有扎实的红宝石知识是我的目标的基础。 Ruby 是一门复杂而迷人的语言,与我所习惯的完全不同。
【解决方案3】:

M 很容易 - 使用 ActiveRecord(或其他)。我有一个 models 子目录,当我的 Sinatra 应用程序加载时,其内容会得到 required。

V 也很简单 - 只需将您的视图放在 views 子目录中 - Sinatra 会自动查找那里。

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

(坦白:我还没有构建一个足够复杂的 Sinatra 应用程序,无法看到需要显式控制器 - 我从 Rails 开始需要这么多结构)

【讨论】:

  • 对于 MV 我毫无疑问地同意,事实上我的 问题C 嗯。我可以将各种动作分组到不同的模块中,其中一个模块就像一个控制器。创造一些未来可以用前端控制器扩展的东西会很棒。
  • 我想你是对的,当你说 “我从 Rails 开始需要这么多结构的地方” 但我对 ruby​​ 几乎不熟悉(来自 PHP 和brr 我公司使用的自定义语言)和 Rails 对我来说似乎太多。我还想通过创建一个来了解一个框架是如何构建的
猜你喜欢
  • 1970-01-01
  • 2014-08-29
  • 1970-01-01
  • 2013-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多