是否有一个框架允许我只定义一次模型



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

如果这个框架可以统一视图和控制器,这样我就不会有应用程序/视图、应用程序/控制器、应用程序/资产/javascripts/视图、应用程序/资产/javascripts/routers等在不同的地方定义类似的东西,那就太棒了。

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

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

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

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


编辑:我尚未仔细研究的其他框架:

  • 流星(节点.js)
  • ClojureScript
  • One (ClojureScript)

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

app/models/widget.rb:

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

app/models/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一样多的动态性。

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

这是

瓦坎达系统的目标之一。

最新更新