Ruby on rails 如何在ActiveRecord中分离持久性?
我目前正在用Ruby(而不是Rails)构建一个应用程序,它使用ActiveRecord作为ORM,使用sqlite作为数据库 一个示例代码,只是为了澄清我的问题:Ruby on rails 如何在ActiveRecord中分离持久性?,ruby-on-rails,persistence,abstraction,rails-activerecord,Ruby On Rails,Persistence,Abstraction,Rails Activerecord,我目前正在用Ruby(而不是Rails)构建一个应用程序,它使用ActiveRecord作为ORM,使用sqlite作为数据库 一个示例代码,只是为了澄清我的问题: class User < ActiveRecord::Base has_many :logins, :foreign_key => :user_id has_many :categories, :foreign_key => :user_id has_many :news, :foreign_key =
class User < ActiveRecord::Base
has_many :logins, :foreign_key => :user_id
has_many :categories, :foreign_key => :user_id
has_many :news, :foreign_key => :user_id
has_many :settings, :foreign_key => :user_id
class << self
def get_user_by_id(id)
find(id)
end
def insert(username, password)
create(:username => username, :password => password)
end
end
end
class用户:用户\u id
有多个:类别,:外部\u键=>:用户\u id
有很多:新闻,:外键=>:user\u id
有多个:设置,:外键=>:用户\u id
类用户名:password=>password)
结束
结束
结束
代码(关系、模型等)目前一点也不复杂。然而,当我的模型开始变大时,我不想在同一个类中混合业务逻辑和持久性逻辑。我希望能够更改我的持久性方法(文件、内存、其他数据库orm)。有没有一个既定的方法可以做到这一点?我读到在Rails中,“瘦控制器,胖模型”很常见,但我正在寻找一种解决方法。不幸的是,ActiveRecord模式可能不是适合您的最佳解决方案。说: 对象同时携带数据和行为。这些数据中有很多是真实的 持久的,需要存储在数据库中。活动记录使用 最明显的方法是将数据访问逻辑放入域中 对象这样,所有人都知道如何将数据读写到 从数据库中 也许您需要研究数据映射器模式(和),它是专门为分离业务逻辑和持久性而设计的 也就是说,如果你真的必须使用ActiveRecord,我会加入一些组合,比如:
class UserRepository < ActiveRecord::Base
# all the persistence stuff goes in here
end
class User
def initialize(login, repository=UserRepository)
@repository = repository
@user = @repository.find_by_login(login)
end
def instanography
#complicated business logic
end
def method_missing(m, *args, &block)
@user.send(m, *args, &block)
end
end
class UserRepository
如上面的示例所示,我会让用户对象充当真实活动记录对象的代理,保留所有业务逻辑并隐藏持久性内容。使用Rails并让它为您完成所有这些工作怎么样?更准确地说,似乎Rails-3的新概念正适合它:ORM抽象。因为我正在构建一个非Rails应用程序,我只想使用ActiveRecord。