The Daily WTF на русском
Подписаться
CodeSOD: Состояние подключения
Фредерик А. делится проблемой проверки на null в методе IsCalling класса ConferenceService. Этот метод пытается определить, активна ли веб-конференция, обращаясь к IsWebRTCConnected через потенциально нулевую цепочку объектов: m_ConnectionService.Core.State.IsWebRTCConnected. Исходный код использует блок try/catch для обработки возможных исключений NullReferenceException, возвращая false, если какая-либо часть цепочки равна null. Этот подход эффективно маскирует основную проблему неинициализированных объектов. Фредерик предлагает использовать оператор нулевого слияния C# (?.) в качестве прямого исправления, которое лаконично вернет false, если любой объект в цепочке равен null, например: m_ConnectionService?.Core?.State?.IsWebRTCConnected ?? false. Хотя это функциональное решение, автор утверждает, что оно не является фундаментальным исправлением более глубокой архитектурной проблемы. Основная проблема заключается в управлении состоянием соединения, предполагая, что оно должно обрабатываться надлежащей машиной состояний. Опора на глубокую цепочку объектов с булевыми флагами для критически важной информации о состоянии указывает на плохой выбор дизайна. Хотя полная реализация машины состояний была бы более надежным решением, автор признает, что это требует значительной реструктуризации. Однако этот пример служит сильным напоминанием разработчикам о необходимости тщательно продумывать свои стратегии управления состоянием, чтобы избежать подобных сложностей с проверкой на null.