gpt4 book ai didi

ruby - 在两个类之间共享一个类实例

转载 作者:数据小太阳 更新时间:2023-10-29 08:37:57 26 4
gpt4 key购买 nike

我有两个不同的类,它们都代表需要持久保存到我的数据库中的对象,现在我想在这两个类之间共享数据库客户端对象。我想避免多次实例化客户端对象。

目前我通过使用全局变量来做到这一点

$client = Mysql2::Client.new(:database => "myDb", :user => "user", :password => "password", :host => "localhost")

class Person
def save
$client.query("INSERT INTO persons")
end
end

class Car
def save
$client.query("INSERT INTO cars")
end
end

这行得通,但我想知道是否有更正确的方法来做到这一点,为什么它们更正确?

最佳答案

您可以从父类继承。这允许您跨对象共享通用功能并遵循 DRY(不要重复自己)编程原则。它还将允许您使用锁、资源、队列、池以及您可能想做的任何其他事情来保护您的数据库连接,而不必在您的子类中担心它

class Record
@table_name = nil
@@client = Mysql2::Client.new(:database => "myDb", :user => "user", :password => "password", :host => "localhost")

def save
@@client.query("INSERT INTO #{@table_name}") if @table_name
end
end

class Person < Record
@table_name = "persons"
end

class Car < Record
@table_name = "cars"
end

当我们讨论这个主题时,您应该考虑使用 ActiveRecord 来处理您的数据库模型和连接。它几乎可以满足您的所有需求,并且与现有的其他 gem 更加兼容。 It can be used without rails .

关于ruby - 在两个类之间共享一个类实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23792097/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com