3

我刚刚完成了几个模型的创建,并且必须将它们的所有属性分别写入 1)Rails ActiveRecord 2)Rails 数据库迁移和 3)Backbone.js 模型。我感觉不是很干燥。我假设解决这个问题的第一步是切换到 node.js,我可以在后端和前端使用 CoffeeScript(理想情况下重用相同的 Backbone.js 模型),但是数据库模式呢?我意识到我可以创建一个从模型属性生成 SQL 的框架,但在我开始这项工作之前,我想知道这样的东西是否已经存在或正在开发中。

如果这个框架可以统一视图和控制器,这样我就没有 app/views、app/controllers、app/assets/javascripts/views、app/assets/javascripts/routers 等所有定义类似不同地方的东西。

4

3 回答 3

0

这是Wakanda系统的目标之一。

于 2012-04-06T07:41:47.507 回答
0

对于模型,您可以简单地创建一个基类并从中继承。您只需要调用set_table_name派生类。我已经摆脱了这个。它的优点是您可以调整派生类中的功能。例子:

应用程序/模型/widget.rb:

class Widget < ActiveRecord::Base
   def some_common_method
      # ...
   end
end

应用程序/模型/blue_widget.rb:

class BlueWidget < Widget
   set_table_name "blue_widgets"
   # special methods, if any
end

等等

对于迁移,只需为公共表列定义一个函数。例如:

def common_table_columns(t)
   t.integer :id
   t.stirng :some_string
   # etc
end

create_table(:table1) { |t| common_table_columns(t) }

[:table2,:table3,:table4].each do |name|
   create_table(name) { |t| common_table_columns(t) }
end

create_table :table5 do |t|
    common_table_columns(t)
    t.string :extra
end

不能代表 Backbone.js(刚刚),但我 100% 确信您可以实现相同类型的重复代码消除。Javascript 与 ruby​​ 一样具有动态性。

说了这么多,为什么你有几个相同的表?您是否使用正确的解决方案来解决正确的问题?

于 2012-04-06T07:46:55.820 回答
0

查看Derby ,这是一个正在积极开发中的 node.js 框架,它试图统一视图和控制器(以及更多):

[Derby] 在服务器和浏览器中运行相同的代码,并自动同步数据。Derby 负责开箱即用的模板呈现、打包和模型视图绑定。由于所有功能都旨在协同工作,因此无需重复代码和粘合代码。

我正在用 Derby 构建一个小型的业余爱好应用程序,到目前为止,它既有趣又具有挑战性。一个统一的新世界有它自己的物理。

需要注意的一点是 Derby 建立在Racer之上,这是一个“实时模型同步引擎”;如果您期待将 Backbone.js、express 和一些数据库层缝合在一起的轻量级胶水代码之类的东西,您可能会发现它“很重”。


编辑:我还没有仔细研究过的其他框架:

于 2012-04-06T08:14:16.847 回答