Не верь, не бойся, не проси - [entries|archive|friends|userinfo]
phantom

[ website | My Website ]
[ userinfo | ljr userinfo ]
[ archive | journal archive ]

[Nov. 24th, 2023|11:58 pm]
Previous Entry Add to Memories Tell A Friend Next Entry
Варианты имплементации идемпотентности

Операция, действие - f. Объект, состояние (под)системы - a. Идемпотентность: f(f(a)) = f(a) = z. (Заметки на полях: f(z) = z, неподвижная точка, терминус).

1. Выполняем то же самое действие над объектом. Состояние объекта остаётся тем же. Вариант реализуется просто. (Заметки на полях: классика).

Риск в том, что реализация на самом деле может быть неидемпотентна, и состояние будет меняться. А если полагаться на это для останова (повторять до неподвижности), то можно и систему подвесить.

2. Проверяем состояние объекта. Если состояние уже терминальное, ничего не делаем. Можно сэкономить на (не)выполнении операции, но нужно реализовать дополнительную проверку.

Следующие подварианты являются нарушением идемпотентности. (Заметки на полях: патологиями).

2.а. Раз уж мы не выполняем f на z, то сужаем f, и на z операция становится не определена. Иногда позволяет сэкономить на имплементации f.

Кроме возможной десинхронизации f и проверки состояния, риск в том, что где-нибудь да как-нибудь мы всё же вызовем f на z.

2.b. На z операция не просто не определена, а запрещена. Выбрасываем "не нажимай кнопку" ошибку. (Заметки на полях: in your face).

Это когда, например, хотят переложить и подчеркнуть ответственность по слежению за статусом на вызывающую сторону. (Заметки на полях: назвать это архитекторная импотенция? каламбур).

2.c. Не просто запрещено и выбрасываем ошибку, а ещё и (под)систему останавливаем.

Например, когда хотят наказать "за несоблюдение правил" вызывающую сторону. (Заметки на полях: терминальная стадия, каламбур).

P.S. Интересный случай, когда нарушение идемпотентности + "fail open" привело к большим финансовым потерям:
https://www.youtube.com/watch?v=PVzcWBmN2L0
LinkLeave a comment

Comments:
From:(Anonymous)
Date:November 24th, 2023 - 05:50 pm
(Link)
у многих телевизоров не было отдельных сигналов вкл и выкл на ремоуте. и многие инжынеры говорили, что это хорошо, ибо упрощение интерфейса
From:[info]phantom
Date:November 24th, 2023 - 06:07 pm
(Link)
А плохие инженеры - всегда переусложняют.
From:(Anonymous)
Date:November 24th, 2023 - 06:42 pm
(Link)
морзе одной кнопкой для всего обошелся. гений!
From:[info]phantom
Date:November 24th, 2023 - 08:12 pm
(Link)
Ну, с т.зр. теории информации там 2 кнопки (если паузу не считать).
From:(Anonymous)
Date:November 24th, 2023 - 06:29 pm
(Link)
нахуй это надо
не проще ли просто найти вербяшку и дать ему по морде