使用Sinatra和DataMapper,类是一样的吗?

时间:2015-02-26 11:52:34

标签: ruby class sinatra datamapper

在sinatra应用程序中为数据映射器声明类时,我知道它看起来像这样:

class Thing
  include DataMapper::Resource

  property :id,     Serial
  property :name,   String
  property :num,    Integer
end

如果这不是一个网络应用程序,而只是桌面ruby程序,你可能会这样做:

class Thing
  def initialize(name, num)
    @name = name
    @num = num
  end
  def doTheThing(num)
    num * 2
  end
end

这样做有意义......

class Thing
  include DataMapper::Resource

  property :id,     Serial
  property :name,   String
  property :num,    Integer

  def initialize(name, num)
    @name = name
    @num = num
  end
  def doTheThing(num)
    num * 2
  end
end

(编辑)忘记我的问题:这有效吗?我在这里错过了什么意见或事情?谢谢!

我目前正在开展我的第一个半大型sinatra项目,并希望得到帮助。

在相关的说明中,任何有关学习代码(sinatra / ruby​​ web apps等)的良好示例的建议都将不胜感激!

谢谢!

1 个答案:

答案 0 :(得分:1)

您提供的不同实现与Sinatra或Web或桌面应用程序本身没有任何关系。桌面应用程序可以使用Datamapper来持久保存对象,而Sinatra应用程序可以使用任何类型的普通旧Ruby对象。

尽管如此,第三次实施可能会引发问题。原因是DataMapper::Resource defines a method called initialize然后用您自己的版本覆盖。

模型类包含您自己编写的其他方法并不罕见。例如,这些可以封装基于持久属性的某种业务逻辑。

所以试着回答你的问题:你的所有课程都是有效的,但最后一课可能不是很明智。