独占は悪魔であり、非読み取り専用/可変状態のシングルトンは「本当の」問題です...
ジェイソンの回答で示唆されているように、Singletons are Pathological Liarsを読んだ後、シングルトンがどのように悪用されることが多いかを示す最も良い例を提供するこの小さな情報に出会いました。
以下の理由で、グローバルは良くありません。
- a. 名前空間の競合が発生します
- b. 国家を不当に暴露している
シングルトンに関しては
- a. それらを呼び出す明示的なオブジェクト指向の方法は、競合を防ぐため、a. 問題ではありません
- b. 状態のないシングルトンは (工場のように) 問題になりません。状態を持つシングルトンは、再び 2 つのカテゴリに分類できます。1 つは、不変であるか、1 回だけ書き込み、多くを読み取る (構成/プロパティ ファイル) というカテゴリです。これらは悪くありません。参照ホルダーの一種である可変シングルトンは、あなたが話しているものです。
最後の声明で、彼は「シングルトンは嘘つきだ」というブログの概念に言及しています。
これはモノポリーにどのように適用されますか?
独占ゲームを開始するには、まず次のことを行います。
- 最初にルールを確立し、全員が同じページにいるようにします
- ゲーム開始時、全員に平等なスタートが与えられる
- 混乱を避けるために、ルールは 1 セットだけ提示されます。
- ゲーム中にルールを変更することはできません
さて、モノポリーを実際にプレイしたことがない人にとっては、これらの基準はせいぜい理想的なものです。独占での敗北は飲み込むのが難しいです。なぜなら、独占はお金に関するものだからです。負けた場合は、残りのプレイヤーがゲームを終了するのを丹念に見守る必要があり、通常、負けは迅速で破滅的です。そのため、通常、ルールはある時点でひねられ、他のプレイヤーを犠牲にして一部のプレイヤーの自己利益に奉仕します。
つまり、友人のボブ、ジョー、エドとモノポリーをしているということです。あなたは急速に帝国を築き上げ、指数関数的な速度で市場シェアを消費しています。対戦相手は弱体化し、血のにおいがし始めます (比喩的に)。あなたの相棒のボブは、できるだけ多くの価値の低い物件の行き詰まりに全財産をつぎ込んでいますが、期待したほどの高い投資収益率は得られていません。不運な出来事として、ボブはボードウォークに着陸し、ゲームから除外されました。
今、ゲームは友好的なサイコロを振ることから真剣なビジネスに変わります. ボブは失敗の見本にされており、ジョーとエドは「あの男」のようになりたくない. だから、主役のあなたがいきなり敵になる。ジョーとエドは、テーブルの下での取引、裏での資金注入、過小評価されたハウススワッピングなど、プレーヤーとしてのあなたを弱体化させるあらゆることを、そのうちの1人がトップに立つまで練習し始めます.
その後、どちらかが勝つ代わりに、プロセスが最初からやり直されます。突然、限られた一連のルールが動くターゲットになり、ゲームはサバイバー以来のすべての高評価のリアリティ番組の基礎を構成するタイプの社会的相互作用に退化します. なぜなら、ルールは変化しており、ルールがどのように/なぜ/何を表現するべきかについてコンセンサスが得られていないからです。その時点で、ゲーム内のすべてのプレーヤーが独自のルールを作成しており、2 人のプレーヤーが疲れすぎてシャレードを維持できず、ゆっくりとあきらめるまで混乱が続きます。
したがって、ゲームのルールブックがシングルトンを正確に表している場合、独占ルールブックは乱用の一例になります。
これはプログラミングにどのように適用されますか?
変更可能なシングルトンが提示するすべての明らかなスレッドセーフと同期の問題は別として...複数の異なるソースによって同時に読み取り/操作でき、アプリケーション実行の存続期間中に存在するデータセットが1つある場合、一歩下がって、「ここで正しいタイプのデータ構造を使用しているか」と尋ねるのはおそらく良い時期です。
個人的には、プログラマーがシングルトンをアプリケーション内のねじれたクロススレッド データベース ストアのようなものとして使用することで、シングルトンを悪用しているのを見てきました。コードに直接取り組んだことで、(スレッドセーフにするためにすべてのスレッドロックが必要なため) 遅く、(同期バグの予測不可能/断続的な性質のため) 悪夢のような作業だったことを証明できます。 「生産」条件下でテストすることはほぼ不可能です。確かに、ポーリング/シグナリングを使用していくつかのパフォーマンスの問題を克服するシステムを開発できたかもしれませんが、それではテストの問題は解決されません。 /スケーラブルな方法。
シングルトンは、シングルトンが提供するものが必要な場合にのみ使用できます。オブジェクトの書き込み 1 回読み取り専用インスタンス。同じルールをオブジェクトのプロパティ/メンバーにもカスケードする必要があります。