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

时间:2012-04-06 07:24:04

标签: ruby-on-rails model-view-controller node.js backbone.js dry

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

如果这个框架可以统一视图和控制器以便我没有应用程序/视图,app / controllers,app / assets / javascripts / views,app / assets / javascripts / routers等等,这也很棒。所有在不同的地方定义相似的东西。

3 个答案:

答案 0 :(得分:0)

这是Wakanda系统的目标之一。

答案 1 :(得分: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(刚才),但我完全相信你可以实现同样的重复代码消除。 Javascript和ruby一样具有动态性。

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

答案 2 :(得分:0)

查看Derbyactive development下的node.js框架,它试图统一视图和控制器(以及更多):

  

[Derby]在服务器和浏览器中运行相同的代码,并且它会同步数据   自动。 Derby负责模板渲染,打包和   模型视图绑定开箱即用。由于所有功能都是为了设计的   一起工作,不需要代码重复和胶水代码。

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

需要注意的一点是,Derby建立在Racer之上,是一个“实时模型同步引擎”;你可能会觉得它很“重”,如果你期待像一个轻巧的胶水代码,将Backbone.js,express和一些数据库层拼接在一起。


编辑:我尚未密切关注的其他框架: