使用 Sinatra 和 DataMapper,类 是一回事吗?

Using Sinatra and DataMapper, are classes one and the same?

在数据映射器的 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

(edit) 忘记了我的问题:这有效吗?我在这里错过了任何意见或事情吗?谢谢!

我目前正在处理我的第一个半大型 sinatra 项目,非常感谢您的帮助。

在相关说明中,如有任何关于要学习的优秀代码示例(sinatra/ruby 网络应用程序等)的建议,我们将不胜感激!

谢谢!

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

也就是说,第三个实现可能会出现问题。原因是 DataMapper::Resource defines a method called initialize 然后你用你自己的版本覆盖它。

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

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