- 1
- 2
- 3
- 4
- 5
- 6
- 7
Можно ли считать говнокодом (говноAPI) правильно работающую, но незадокументированную особенность API?
Например у вьюхи есть свойство isOpen, которое может быть задано (true/false) а может быть не задано (undefined).
Первое нужно для управления видимостью в реактивном стиле, второе предполагает что разработчик будет
управлять видимостью через хендлы вьюхи. И оно так и работает - если isOpen=undefined, то этот проп просто игнорируется
при обновлении вьюхи (чтобы не допустить конфликта source truth). Но этого нет в документации, отчего неосторожное
использование булеана и значения которое может быть undefined в качестве значения isOpen, приводит к забавному
косяку - вьюха должна исчезнуть, но она не исчезает! И тут по-началу грешишь на забагованное API. Но в нем нет бага!
А если это (совсем не очевидное, будем честны) поведение еще и недокументировано, то говнокод в квадрате.
Ты понял(а) значение undefined так, твой коллег этак, а автор API вообще подумал, что это бага или побочный эффект, и пофиксил это в минорном апдейте
Я бы в данном случае для устранения неочевидности сделала бы поле типа visibilityBehavior: 'imperative' | 'reactive'.
> Поле, начинающееся с "is", и имеющее три состояния, это, разумеется, говнокод.
А если это поле не нужно когда собрался управлять видимостью не реактивно, а через методы компонента? Смысл undefined в том что нам не во всех случах нужно данное значение. Ну или в том что данных на каком-то шаге может не существовать вообще, а выполнить какую-то логику надо.
Пусть будет интерфейс Strategy и две реализации: Imperative и Reactive.
И поле "isOpen" будет в том, где оно используется.
У меня от джавки внутри вырос довольно крупный ``AbstractFactoryBuilderProxyProviderImp l``, и он иногда говорит за меня.
Бурт правильно сказали: в TS нужен UNION, а никакой не интерфейс. просто юнион из двух реализаций.
Смысл интерфейса в том, что нам важно иметь возможность прокинуть определенные данные или поведение в модуль на уровне юзера. И не важно какие еще поля содержит структурка либо как вписать новый код так, чтобы не сломать старую неизменную часть. В TS interface часто используется как объект (структурка), не являющаяся инстансом user-defined класса.
З.Ы. Использование недокументированной фичи, само собой, говнокод.
> можно заявить
Так-то да, любую незадокументированную штуку можно удалить и никто не сможет жаловаться. Правда, мне попадался случай, что какую-то штуку сначала тихонько удаляли из документации :D
К сожалению это не так. Юзеры виноватым будут считать тебя, а не того, кто это вызывал...
Так что проще задокументировать. И поддерживать вечно.
Бля, не только на экран, но и в локал сторож
https://novayagazeta.ru/static/records/2f38f06b224648d0941b5ff8193d69ab.webp
Депутат из КПРФ попался на совращении 11-летнего мальчика
Больницы достроят!
ЕР добилась финансирования на завершение строительства больниц в регионах
(именно поэтому я против "HTTPS")
Почему в КПРФ предпочитают владеть зарубежной недвижимостью?