11 дней до каникул: Карусель

Если долго кататься на карусели, рано или поздно начинает… В общем, может резко случиться морская болезнь. Мне всё чаще кажется, что рабочая неделя — это как раз один оборот какой-то извращенской карусели. Кто-то назовёт это цикличностью, но сут это не меняет.

Что делать, чтобы не поплохело? Конечно идти в отпуск. Ну а пока до него куча времени, пройдусь хотя-бы до кухни и чаю заварю.

Сегодня нужно в очередной раз усвоить принципы SOLID и выучить ACID.

ACID, это 4 требования сохранности данных при работе с базами.

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

C — Согласованность. Не знаю зачем это вынесли отдельным пунктом, ибо согласованность вытекает из атомарности буквально автоматически. Хотя… атомарность может поддерживаться на уровне сервера базы данных, а согласованность, на уровне софта. Т.е. это забота программиста.

I — Изолированность. На транзакцию не должны влиять параллельные транзакции.

D — Дюрабилити (надёжность). Если пользователь получил сообщение об успешной транзакции, значит данные уже сохранены. Даже если после этого сервер обесточат, все данные будут там где им положено быть.

SOLID, это принципы применяемые к классам

И вот тут выучить сложно, поскольку ради красивой аббревиатуры была утеряна мнемоничность. Каждый раз забываю, но я попробую вспомнить.

S — Сингл аппликейшин. Больше классов миру классов. Один класс должен отвечать за одну сферу деятельности. Например, только за работу с базой данных. Или только за чтение/запись в логи. Почему? А чтобы его можно было использовать повторно в других проектах, а не писать заново. Кроме того, такой класс можно потом улучшить, и эти изменения применить везде где он используется.

O — Опен/клозет (звучит как открытый туалет), а на самом деле принцип открытости/закрытости. Пусть будет открытость/закрытость. Класс должен быть открыт для расширения, но закрыт для изменения.

L — Лисков субститъюшин. Дочерний класс должен иметь весь функционал, который имеет родительский класс. Т.е. если например метод отдавал результат типа стринг, то и в дочернем классе он должен отдавать значение типа стринг. Если метод принимал два аргумента типа интеджер, то и в дочернем классе он должен принимать те же аргументы. Иначе замучаешься ловить баги.

I — Интерфейс сегрегейшин или разделение интерфейсов. Больше интерфейсов миру интерфейсов. Лучше сделать больше интерфейсов под разные сферы, чем всё пихать в один.

D — Dependency Inversion Principle. А вот с этим вообще сложно. Даже в википедии по этому пункту не сказано ничего, кроме того что это важный принцип ООП. Вдумчивый поиск практически ничего не дал. Все как попугаи повторяют, что мол модули верхних уровней не должны зависеть от модулей нижних уровней, и оба должны зависеть от абстракций. Абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций.

По сути не бред, но звучит как бред полный. Какие ещё модули? Какие детали? Что за абстракции???

Понятно, что принцип призван уменьшить зависимость классов друг от друга. Иногда получаются такие клубки, что потом, при изменении одного класса, менять приходится ещё кучу других. Но вот подан этот материал отвратительно.

Т.е. если внутри класса создаётся объект другого класса, то это фу таким быть. Ответственность за создание объекта нужно переложить на что-то другое. Выглядит, как лозунги и мечты. Я только один раз встречал удачную реализацию данного принципа, и даже применил её в каком-то из своих проектов. Но уже не помню где конкретно и как именно.

Теперь про абстракции.

Есть такая вещь, как абстрактный класс. Это класс, где хотя-бы один метод объявлен, но не реализован. В PHP для объявления такого класса достаточно перед class поставить слово abstract. Соответственно, внутри класса, перед абстрактным методом, так-же добавляем пишем слово abstract. Напрмер abstract public function foo($a) :string;

Из абстрактного класса не создать объект. Его можно создать из дочернего класса, где абстрактная функция должна быть уже реализована. При том, с тем же именем, доступом, типом возвращаемых данных (если задано) и с тем же количеством аргументов (или с большим).

Есть такая вещь, как интерфейс. Интерфейс, это тоже абстрактный класс, в нём тоже объявляются методы, но ни один из них не реализован.

Вспомнил! В том проекте я в конструкторе указывал в качестве типа объекта не имя класса, а имя интерфейса! Таким образом, при создании объекта смог вставлять объект любого дочернего класса указанного интерфейса.

Хм… удобно. Меньше работы и путаницы, больше пользы.

«Ржу-нимагу».

11.11 — было. «Черная пятница» — была. Встречайте! Киберпонедельник (#cybermonday2021) завезли!

Не иначе у втюхивателей предзимнее обострение нездоровых фантазий и жажды бабла.

Вместо того, чтобы реально снизить цены на существенный процент, они занимаются налюбиловом покупателей. Смотришь на историю изменения цен, и начинает бомбить.

Я понимаю, что репутация ничто, бабло — всё. Но осадочек остаётся и копится. Копится…

Тяжело гонять тесты и одновременно читать мануалы. С непривычки голова шальная. Зато в неё приходит неожиданно много идей.

Внезапно обнаружил, что пропустил обед, настолько интересная информация попалась. Срочно выдвинулся в сторону кухни и отведал наваристого супа с фрикадельками.

Благодать! Если бы ещё соседи не дрелили… Вот вроде между нами три этажа, а слышно так, что хоть переезжай.

Ноябрь вот-вот закончится. Меньше двух дней осталось. Послезавтра зима. На улице снег. Солнце садится, хотя вроде-бы рановато ещё. Увы, но такая продолжительность дня (06:34) появится снова лишь 13 января.

Кстати, самых коротких дней в году будет не один, а целых шесть (если не считать секунды). Продолжительность дня с 19 по 24 декабря составит 5 часов 51 минуту.

Не люблю, когда просыпаешься — темно. Заканчиваешь рабочий день, и снова темно. Хорошо, что искусственное освещение уже изобрели.

Надеюсь, кибервторник завтра не устроят? Весть день попадаются всевозможные предложения от «щедрых» продаванов. Достало уже. При том, схема настолько древняя, что поражаешься их лени.

  1. Выяви проблему клиента или бери общечеловеческую (обычно всем не хватает денег)
  2. Намекни, что твой продукт связан с решением этой проблемы (сэкономит/принесёт денег).
  3. Убеди, что купить продукт у тебя будет (прямо сейчас) намного выгоднее чем обычно.
  4. Если сомневается, предложи дополнительные плюшки (которые почти ничего не стоят).
  5. Если нет денег, помоги оформить кредит (или кредитную карту) и получи партнёрское вознаграждение от банка.
  6. ????????????
  7. PROFIT!

Никакой фантазии. Из года в год одно и то же… И ведь работало, работает и работать будет.

И пока взрослые мальчики и девочки играют в фантики, позади стоит смерть и недовольно поглядывает на часы.

Кстати о часах. На моих 17:07. Решил сделать короткий перерыв и измерить температуру электронным термометром. Что-то мне не файн. И он выдал 42,2С. Потом одумался и показал 39,4С. Проверил на остальных, у них 36+, как и положено.

Обычный термометр показал 35.9С и я ему верю. Почему бесконтактный термометр так реагирует именно на меня — большой вопрос. Какая-то долбаная магия вне Хогвардса!

Ну хоть тесты радуют… стабильностью. Они стабильно падают, а у меня от этого бомбически бомбит. И боюсь, я начал привыкать к всратости ПО, которое тестирую. Это плохо. С этим надо что-то делать. Чувствую себя лаборантом в поликлинике, которому добрые люди приносят множество баночек… с выделениями. Буэ!
Тут тоже копаюсь в… всяком, и этого всякого много. Хорошо что данный продукт хотя-бы не пахнет.

Судя по настроению, нужно заняться если не лечением, то профилактикой точно. Чай с лимоном подойдёт! Вот запущу сейчас ещё один проход цепочки, и поставлю чайник.

Чай заварен, налит и пьётся. Сразу стало веселее. Тесты пока на середине цепочки. Термометр вроде устаканился и теперь показывает 36+.

И в этот момент сигналит приложение, что мол акции Твиттера пробили очередное дно. Т.е. пока курс движется ровно так, как я и предсказывал.

Ну-с, товарищи инвесторы. Пришло время инвестировать в корвалол и валерьянку. Или воспользоваться правилом «правой руки» (поднять и резко махнуть). Ну или дыхательной гимнастикой. Думаю, в марте всё снова пойдёт вверх, а пока имеем то что имеем.

Впрочем, прогнозировать то, на что не можешь влиять ты, но могут другие, дело бесполезное.

А дальше будет вечер, просмотр летсплея и сон. Ничего такого, на что стоило бы потратить ещё пару байт.

=== Заметки ===

Ночью надо спать. Выключай смартфон. Сейчас!

Пришло время носить очки во время чтения))
#очкарик

Как превратить работу в увлекательную игру? Кто-нибудь пробовал? Как успехи?

Ещё...

Напишите комментарий

Введите имя

Введите адрес электронной почты

Введите адрес вашего сайта

Нажмите эту кнопку, чтобы отправить комментарий.

Введите текст комментария