Метод общественного значения
Обычно это, но не всегда, результат проблем секвенирования в отношении подписки.
Пример: если услуга подписывается на ReplaysUbject, но необходимо на самом деле получать данные, которые еще не могут быть готовы, вызов подписки часто вкладывается в метод init, чтобы обеспечить .подписываться () называется после первого .Next () называется.
Хотя это решает проблему немедленного секвенирования, это не делает ничего для устранения, почему секвенирование было проблемой для начала. Почему есть вероятность того, что она подпишится к воспроизведению перед первым .Next () называется? Почему это сломать вещи? Почему наблюдаемое воспроизведение вообще?
Другая причина этого запаха представляет собой братскую или межлучевую зависимость.
Пример: сервис A уведомляет службу B и сервис C, но сервис C нуждается в результирующем объекту ответа службы B на услугу A. Поэтому Service Cs подписывается вызов подписки в соответствии с методом init, а сервис A Subject Beautible должен быть воспроизведенным. ¯ \ _ (ツ) _/¯
Проверка недвижимости
99% случаев, когда это учитывать сценарий, в котором называется метод, когда он не должен вызывать.
Пример: .unsubscribe () называется недвижимостью, но в недвижимости нет подписки.
Добавление проверки свойств остановит любые следы стека, но он не решает проблему в базовой конструкции. Почему возможно, что .unsubscribe. () можно назвать, прежде чем что-нибудь будет подписано? Это симптом базовой структурной проблемы?
Флаги
Хотя угловые заманили нас полагая, что флаги в порядке с их Директива NGIF Нет никаких других случаев, когда это не закончится плохо (и что может тоже).
Флаги не масштабируются. Если вы добавите второй флаг, у вас сейчас нет двух, но четыре потенциальных состояния влияют на ветвящую логику. O (n²) для цикломатической сложности.
Флаги должны быть переключены в нужное время. Время быть работоспособным словом там. Флаги вводят еще один уровень секвенирования для контроля потока, и хотя он может быть тривиальным в начале, он может быстро выходить из контроля.
Раннее возвращение
Это может получить некоторую точку зрения. Да, это удобно. Нет, это не вызывает никакого прямого вреда. Но почему была функция вызвала в первую очередь, если все это будет делать, это ничто?
Это обычно указывает на недостаток, или отсутствие, восходящую логику ветвления.
Пример: Тема А имеет подписчики X, Y, Z. Полезная нагрузка в .Next () Звонок логический. Методы реагирования X, Y и Z возвращаются рано, если логическое значение верно, ложно, верно соответственно.
Скажем, тема A вещает на .interval 200ms и каждую минуту полезной нагрузки ложь. В то время как это приводит к тону ненужных вызовов, она также создает шаблон, где все в порядке, чтобы подписаться на что-то, когда вам нужно только уведомить долю времени.
Проблема не с самой ранней доходностью, этот вопрос – это то, что он может скрыть. Многое, как проверка имущества, он будет скрывать следы стека, но он не будет решать или не освещать любые структурные проблемы.
Оригинал: “https://dev.to/hdennen/4-regular-life-javascript-code-smells-with-rxjs-5d0c”