|
|
1
8
我不确定我是否会为了这样一个基本需求而浪费数据库/活动记录/模型开销。这个数据是相对静态的(我假设),不需要进行即时计算(包括数据库查找)。 既然这样,我建议您用站点范围的设置定义一个yaml文件,并定义一个将设置加载到常量的初始值设定项文件。你不会有那么多不必要的运动部件。 没有理由数据不能保存在内存中,从而为您节省大量的复杂性。常量在任何地方都可用,不需要初始化或实例化。如果使用类作为单例是绝对关键的,我建议您执行以下两项操作:
|
|
|
2
53
(我同意@user43685,不同意@derek p——有很多很好的理由将站点范围的数据保存在数据库中而不是yaml文件中。例如:您的设置将在所有Web服务器上可用(如果您有多个Web服务器);对设置的更改将是ACID;您不必花费时间实现yaml包装等)。 在Rails中,这很容易实现,您只需记住您的模型应该是数据库术语中的“单例”,而不是Ruby对象术语中的“单例”。 最简单的实现方法是:
所以迁移应该是这样的:
模型类应该如下所示:
在rails>=3.2.1中,您应该能够用调用替换“instance”getter的主体。 first_or_create! “像这样:
|
|
|
3
24
我不同意大家的看法——从数据库中读取属性没有任何问题。如果愿意的话,您可以读取数据库值并冻结,但是除了简单的冻结之外,还有更灵活的选择。 yaml与数据库有什么不同?…相同的钻取-应用程序代码持久性设置的外部。 数据库方法的好处在于,它可以或多或少地以安全的方式动态更改(而不是直接打开和覆盖文件)。另一个好处是它可以在集群节点之间的网络上共享(如果正确实现的话)。 然而,问题仍然是,使用ActiveRecord实现这种设置的正确方法是什么。 |
|
|
4
11
您还可以强制最多一条记录,如下所示:
这将覆盖
然后,您可以继续只定义作用于一个记录的类方法:
|
|
|
5
6
我知道这是一条古老的线,但我只需要同样的东西,我发现这条线有一块宝石: acts_as_singleton . 安装说明适用于Rails 2,但它也适用于Rails 3。 |
|
|
6
3
很有可能你不需要单身。不幸的是,从模式狂热中产生的最糟糕的设计习惯之一也是最常用的设计习惯之一。我责备这种不幸的简单的外表,但我离题了。如果他们称之为“静态全球”模式,我相信人们会更羞怯地使用它。 我建议将包装类与要用于单例的类的私有静态实例一起使用。在整个代码中,您不会像使用单例语言那样引入一对紧密的夫妇。 有些人把这称为单态模式。我倾向于把它看作是对策略/代理概念的另一个扭曲,因为您可以通过实现不同的接口来公开/隐藏功能来实现更大的灵活性。 |
|
|
7
2
简单的:
|
|
|
8
1
使用
|
|
|
9
1
您也可以查看configatron: http://configatron.mackframework.com/ configatron使配置应用程序和脚本变得非常容易。不再需要使用常量或全局变量。现在你可以使用一个简单无痛的系统来配置你的生活。而且,因为它是红宝石,你可以做任何你想做的疯狂的事情! |
|
|
10
0
常量::字段名 |
|
|
11
0
你可以这样做:
|
|
|
12
0
我假设使用继承列
父类中的几个方法:
之后,您可以永远为单例模型类使用单记录。 在加载模型类期间,将一次性加载或创建实例。 |
|
|
S qasem · Android内存性能 7 年前 |
|
|
R83nLK82 · 在单例设计模式上引发IOException 7 年前 |
|
|
hal · 两个课程有什么区别?他们的工作方式不同吗? 7 年前 |
|
Jaquarh · 如何在不使用DI的情况下实例化父类 7 年前 |
|
|
Deepanshu · 基于PHP的Web应用程序中的单例对象状态 8 年前 |
|
|
dicle · 视图控制器中的依赖项注入 8 年前 |
|
|
Kozuki · 如何在生产代码中考虑单例? 8 年前 |