先日、#ruby-lang チャンネルの誰かと について話しました@@class_variables
。すべては、あるユーザーが、自分のサーバーに接続しているユーザーを追跡する最善の方法は何かと尋ねたときに始まりました (少し単純化しましたが、それが要点です)。
だから、私は提案しました:
class User
@@list = {} #assuming he wants to look up users by some type of ID
def initialize(user_id, ...)
@@list[user_id] = self
#...
end
end
ただし、ここでグローバル状態を使用することは悪い習慣と見なされると誰かが言いました。
複数のバックエンドに依存するものにとってなぜグローバル状態が悪いのか、私は理解しています。なぜなら、グローバル状態のグローバル部分がグローバルではなくなり、その 1 つのバックエンドにローカライズされるからです。または、依存性注入を妨害すること。
とはいえ、これが悪い理由は他に思いつきません。また、同時実行性が問題になった場合 (複数のバックエンドが必要な場合)、Redis (または同様のもの) を使用するようにコードを更新できます。
また、この質問をprogrammers.sxcで見つけましたが、上記のコードがなぜそれほど悪いと考えられているのか理解するのに役立ちませんか? また、代替手段は何ですか?