The Daily WTF 日本語
フォロー
CodeSOD: コネクションステート
Frederick A. は、ConferenceService クラスの IsCalling メソッドにおけるヌルチェックの問題を共有しています。このメソッドは、潜在的にヌルであるオブジェクトチェーン m_ConnectionService.Core.State.IsWebRTCConnected にアクセスすることで、Web 会議がアクティブかどうかを判断しようとします。元のコードでは、try/catch ブロックを使用して潜在的な NullReferenceException を処理し、チェーンのいずれかの部分がヌルであれば false を返します。このアプローチは、初期化されていないオブジェクトの根本的な問題を効果的に隠蔽します。Frederick は、C# のヌル合体演算子 (?.) を直接的な修正として使用することを提案しており、チェーン内のいずれかのオブジェクトがヌルであれば、簡潔に false を返します。例えば、m_ConnectionService?.Core?.State?.IsWebRTCConnected ?? false のようになります。これは機能的な解決策ですが、著者は、それがより深いアーキテクチャ上の問題に対する根本的な修正ではないと主張しています。根本的な問題は、接続状態の管理方法にあり、適切なステートマシンで処理されるべきだと示唆しています。重要な状態情報のために、ブールフラグを持つ深いオブジェクトチェーンに依存することは、設計上の誤りを示しています。完全なステートマシンの実装はより堅牢な解決策になりますが、著者はかなりのリファクタリングが必要であることを認めています。しかし、この例は、開発者がこのようなヌルチェックの複雑さを避けるために、状態管理戦略を慎重に検討することを強く思い出させるものとなります。