如何在一个位置存储与Rails视图组件关联的所有文件?

时间:2018-02-27 10:55:01

标签: ruby-on-rails architecture

尽管我喜欢Rails,但它倾向于在文件系统中远远地分散特定视图的组件。这让人感到困惑。

Rails的网页视图

Rails具有由布局,模板和部分驱动的网页视图。我认为这源于旧的PHP方式,即查看将页面视为文档的内容,并且文档的某些部分需要在其他文档中重新呈现。

然而,现代网页远不如文档,而是更多的网格,其中布置了一系列组件。每个组件都做不同的事情,并有自己的样式,逻辑和布局。组件也应该可以在其他地方轻松使用。

这类似于局部的概念,除了我们说部分还应该包含其样式和逻辑的细节,而不仅仅是HTML(我相信这就是React对世界的看法)。

网页的组件驱动视图

为了简单起见,我要说实际的HTML视图由嵌套组件组成,其中每个组件都有:

  • HTML模板
  • 一个ruby view-helper文件 - 理想情况下是隔离的ViewObjects
  • CSS文件
  • 带有RSpec测试的文件

默认情况下,rails会在文件系统

周围散布单个组件的各个部分

目前,这些在我们的Rails项目中分散得很远,这使得很难大规模跟踪事物并确定与什么相关的内容

  • 视图逻辑位于/helpers(或者我们已开始使用ViewObjects/view_objects/...
  • html存储在/ views / ...`
  • CSS位于/assets/stylesheets/...
  • 测试位于/spec/...

随着所有地方的到来,它很难确保逻辑,测试,样式和模板都很好地组合在一起,并且他们倾向于开始溢出彼此的责任。

将此与我们的前端逻辑(Angular)

进行对比

我们的前端完全是Angular。多年来我们已经使它成为我们自己的自定义设置,但是每个Angular组件都有自己的目录,并且在目录中(比如联系表单):

  • contact_form/contact_form.js - 组件的指令(逻辑)
  • contact_form/contact_form.html - 组件的HTML模板
  • contact_form/contact_form.css.scss - 组件的CSS (理想情况下,我们也会在这里进行测试,但我们还没有那么远

有没有办法将Rails组件的资产分组到同一目录中?

我想对我们使用的Rails组件做同样的事情。我想为每个组件创建一个目录(比如说一个联系表单),其中包括:

  • /contact_form/contact_form_view_object.rb - 控制逻辑的ViewObject
  • /contact_form/contact_form.html.haml - HTML模板
  • /contact_form/contact_form.css.scss - 模板的CSS
  • /contact_form/contact_form_spec.rb - 组件的RSPEC文件

通过这种方式,组件的责任以及相关的测试和样式更加明确,项目的发展变得更加容易,而不会陷入巨大的交叉责任。

这可能吗?

0 个答案:

没有答案