Re[76]: Годами не могу вырваться из некорректных вопросов на
От: Poopy Joe Бельгия  
Дата: 05.05.20 17:13
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Это я пытаюсь использовать ваши же определения, чтобы вас понять.

Угу, я вижу...

PJ>>У нас, да и никто в здравом уме, не считает лик или еще какие баги функциональными требованиями.

S>Да ладно? Пять постов выше вы мне доказывали, что отсутствие лика — это самое что ни на есть функциональное требование.
Ну никакой вообще разницы.

S>Ну вот видите. Это примерно то, чего и следовало ожидать. А вы продолжаете строить из себя девочку и говорить "ой, я не понимаю, как это из-за breaking change может кто-то пострадать финансово", и "вывсёврёти, никаких сотен тысяч не будет". При этом у вас же у самих один клиент может встрять на полмиллиона. Специфика веба — только в том, что одним обновлением можно положить не одного клиента, а сразу десятки и сотни.

Это очень серьезное исключение, а не результат любой ошибки.

S>Даже если клиент не выставил требования вашей компании — это не повод гадить ему в profit and loss report. И любой сотрудник с правом принятия решений должен это понимать.

S>А не говорить "да откуда там у них 400к — что они, не могут копеечное изменение на своей стороне внести?". "Они что, идиоты — не могли прочитать инструкцию от API?". "Я же ясно написал в сигнатуре — Option<float>, ну и что, что предылущие 15 лет оно никогда Nothing не возвращало".
Давай вот не будет передергивать. Никто не говорил, что клиентам надо просто ломать все внезапно. С ними можно и пообщаться, и дать время, и постоянно контакт поддерживать. Блин у вас апи поменять, а у нас технологически линии иногда перестраивают, и ничего.

S>Омг. Тот же самый инвариант можно получить, просто сделав атрибут "подписка" nullable. Ровно тот же — никто никому ничего не обещает. И оба варианта имеют в длинной перспективе примерно отрицательную полезность.

Нет, нельзя! Возможно ты не понимаешь значение термина инвариант. Он всегда валиден, всегда. По определению. В твоем случае можно, технически, получить подписку (реальную подписку) с нулевым ид. И ты даже не сможет понять, что он сломан. Это не инваринт.

S> Отож. Пусть попадают на 400к. Главное, что мы молодцы — успешно провели рефакторинг, инварианты сохранены. Пусть найдут того, чья эта ошибка, и лишат его премии. На сто лет вперёд.

Ты будешь смеятся, но попали именно потому что НЕ делали рефаторинг. Ну или делали меняя местами переменные. В результате довели свои проект до состоянии, когда уже просто не могли выдерживать сроки с хоть как-то приемлимым качеством и сорвали дедлайн. А у нас дедлайны, по объективным причинам, жесткие.

S>Да-да. Пример Netscape отлично показывает, что бывает с теми, кто решил "написать заново".

S>Пример Edge — тоже. Что у нас там ещё на плаву осталось? Ткните пальцем в браузер, который выиграл от идеи "написать заново".
Т.е. не начни МС edge, так бы все и пользовались IE? Никто не гарантирует усхпеха, гарантия только на то, что старье сдохло и править его бесполезно.
Я могу ткнуть пальцем в себя, как раз в такой ситауации. Частично благодаря ситуации выше, новый продукт перезапустили с нуля, спросив что вам мешает делать быстро и чего не хватает и дав на все зеленый свет и волю инженерам, а не "параноидальным" менеджерам. Так и F# там появился. И спустя несколько лет всем (причастным внутри) очевидно, что у нас самый легко развиваемый продукт, на точность сроков и качество в котором можно положиться. И сейчас те же топы, которые тогда ссали на ляжки, очень радуются своему решению.

PJ>>Я не говорил про текстовое описание, я говорил про тип. У тебя опять заготовленный ответ из будущего?

S>Тогда я не понимаю, что именно вы предлагаете "прочитать" в предыдущей фразе. Давайте так: вы приведёте сигнатуры API в каком-то понятном виде. Можно в виде интерфейса C# — имена, параметры, типы.
S>Его относительно легко вытащить наружу хоть как SOAP, хоть как JSON/REST, хоть как XML-RPC, поэтому деталями сериализации можно пренебречь.
class BatchOrderResponse 
{
 List<Order> orders;
 BatchOrdersSignature batchSignature;
 ExpectedAllBatchesSignature totalSignature;
 Counter counter; // если надо. итд...
}

class API
{
 GetOrderBatch(...)
 GetAllOrders()
 ValidateSignature(List<BatchSignature>, totalSignature)
}


S>что один ордер не может быть вёрнут и GetOrderBatch(1) и GetOrderBatch(2),

Гарантировать это сервер должен. Ответом это только проверить можно.

S>Поэтому олух из Редмонда, который решил, что любую недокументированную штуку можно безнаказанно исправлять, не согласовывая это ни с кем за пределами компании, просто сжигает чужие деньги.

Ну да, МС вас нагибает.

S>О таких вещах должен думать любой человек с правом принятия решений. Разработчики имеют тенденцию деньги игнорировать — вот вам, человеку, работающему на промышленность, я уже неделю пытаюсь объяснить, каким это образом невинное изменение сигнатуры может принести хоть какой-то ущерб. И даже вы отделываетесь "пфе, что за фигня, если они не могут моментально поправить свой код для обработки другого кода ошибки — грош им цена".

Так вы и можете, просто вам времени не дают, в этом суть проблемы.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.