Pro насилие
Приснилось, будто попал в параллельный мир, встрял в войну между какими-то существами. Кажется, они назывались аякаси. Женился на аякаси, которая возглавляла одну из фракций. Кажется, фракцию воздуха. И мало того, она забеременела! При том, срок беременности у них всего несколько дней. Такая вот физиология.
Мы договорились с какими-то «хранителями моста»… Долго препирались, но уломали. Попали уже в наш мир, и вот картина маслом: я знакомлю Л. со второй женой, которая уже с пузиком и в субботу родит. И лицо у Л. было такое, что сразу стало ясно, вторую жену она примет, но лично я, немного позже, за «неразборчивость в связях с общественностью», познаю много всякого… разного.
Там была ещё целая пачка приключений. Например, я, с моей беременной аякаси, искали какой-то могущественный клан (и это в нашем-то мире!), который похищает людей и проводит между ними гладиаторские бои. Навёл на них призрак одного такого гладиатора, которого встретили в кафе. Оказалось, я стал видеть духов усопших.
В общем, хоть беги и пиши книги. Но нужно писать код. Я ж программист. Мне ж работать надо, а не сны пересказывать.
Считается, что работу мы себе выбираем сами. Но так ли это?
Так! Хотя здесь и имеет место скрытое насилие.
Вот смотри: выбрать работу ты можешь.
Но не всякую. Например, гендир Газпрома может быть только один. Однако, сама по себе концепция свободы выбора и не подразумевает такого финта. Выбор, это когда ты выбираешь. Выбираешь из того, что доступно для выбора. Т.е. выбирая между чёрным и белым ты не можешь выбрать зелёное. Даже если тебе оно очень надо.
Не выбрать ничего ты не можешь тоже, если это не предусмотрено. Можешь отсрочить выбор. Кстати, на этом основано множество манипулятивных методик.
С работой та же петрушка. Ты можешь выбрать любую, но лишь из доступных для выбора. Вроде-бы даже можешь выбрать «ничего». Т.е. — не работать вовсе.
Но нет. Просто у тебя появится новый выбор: либо участь бомжа, либо преступника, либо умереть с голоду, либо все три сразу. Я конечно утрирую, но зато так нагляднее. Т.е. тебя подталкивают выбрать именно работу. Не важно какую, но работу. А иначе…
А потому, что ты должен платить налоги. Иначе, какой с тебя прок? Разве что в качестве живой иллюстрации в стиле «как делать не надо».
И нет, предпринимательство — это тоже работа. И тоже «на дядю». Точнее, на неких дядь, которых ты может быть даже не знаешь. Просто без посредника, в виде работодателя.
Насилие ли это? Формально нет, но по факту — да. Впрочем, вокруг нас много разного насилия, от мягкого и стыливозавуалированного, до жестокого и прямого как стилет, что вонзился в печень в тёмной зассаной подворотне.
Школа = Насилие. Ребёнок не выбирает ходить туда или нет. За него решают родители. И школа это благо. Так говорят.
Законы = Насилие. Их пишут другие, а тебя ставят перед фактом. И они благо тоже, иначе придут хаос и смерть.
Налоги = Насилие. Делай что хочешь (в рамках закона), работай кем хочешь, имей мнение какое хочешь, но налоги плати. Просто «потому-что».
Поэтому, надо сделать над собой насилие усилие и поработать. Тем более, что задача интересная. Она бросает мне вызов, а значит у неё нет шансов.
Что такое концепция SOLID в программировании? Формально это свод из пяти правил, продиктованных здравым смыслом. На самом деле — это тоже насииииилие))
Решил освежить в памяти, вот заодно и запишу здесь. Вдруг кому пригодится?
Solid — переводится как камень. Но по факту это что-то типа аббревиатуры или акронима. Каждая буква в слове, это первая буква правила.
Single responsibility — принцип единственной ответственности.
Open-closed — принцип открытости/закрытости.
Liskov substitution — принцип подстановки Барбары Лисков.
Interface segregation — принцип разделения интерфейса.
Dependency inversion — принцип инверсии зависимостей.
Single responsibility
Один класс — одно дело. Т.е. не стоит делать класс, который одновременно отвечает за подсчёт стоимости заказа и за способ отправки письма заказчику.
Почему? А вдруг завтра понадобится отправить эти данные не на e-mail, а в телеграм-канал? Или и туда и туда? Или ещё и в CRM, чтобы менеджер связался с заказчиком? Да мало-ли вариантов?
Вам не придётся менять класс обработки заказа. Вы лишь дополните класс, отвечающий за способ отправки.
Кстати, формирование текста сообщения тоже стоит вынести отдельно. Ведь шаблон сообщения может меняться, например, в зависимости от способа отправки.
Такой подход ускоряет правки, делает код понятнее, позволяет избегать ошибок, делает более удобным покрытие классов тестами.
Open-closed
Классы должны быть открыты для расширения, но закрыты для модификации.
Не буду описывать подробно и с примерами. Скажу только, что это «камушек в огород» тех разрабов, кто использует private методы там, где стоило-бы использовать protected.
protected, в отличии от private, даёт доступ к методу или свойству из подкласса.
Это не значит, что одно нужно тупо заменить на другое. Здесь требуется подойти с умом.
Liskov substitution
Ох уж эти фамилии. Абсолютно «неговорящее» название. Вот лично я с Барбарой Лисков не знаком.
Знаю только, что данный принцип она предложила на конференции, в докладе про Абстракции данных в 1987 году.
Я понимаю этот принцип так: Всё что обращалось к родительскому классу, должно без проблем обращаться и к дочернему.
Т.е. наследник должен в полном объёме поддерживать «дело» своего предка.
Грубо говоря, если повар-отец на запрос клиента «а подайте-ка мне супа» готовил суп Харчо, то сын тоже должен уметь готовить какой-нибудь суп в ответ на такой запрос. Пусть хоть вермишелевый, но чтоб суп! Постоянный клиент не должен страдать.
Interface segregation
Ну тут всё просто. Класс может имплементировать в себя несколько интерфейсов.
Поэтому, лучше несколько маленьких, но специализированных интерфейсов, чем один универсальный, но большой.
Dependency inversion
Самый непонятный из принципов. На словах вроде всё просто: Модули (классы) верхних уровней не должны зависеть от модулей нижних уровней. И те и другие должны зависеть от абстракций.
Вам понятно? Мне — нет. Ху из модули верхнего уровня? Ху из модули нижнего уровня?
Придётся разбираться.
Предположим, у нас имеется некий класс, который работает с базой данных персонажей. Ну там выводит список гильдий, список персонажей, а так-же прочую информацию о них. Он и будет нашим классом верхнего уровня.
При создании объекта мы хотим сразу создать соединение с источником данных. В нашем случае, источник — база данных MySQL.
Поэтому, в метод __construct (в параметры) мы пихнём объект класса, MySQLConnect $dmObject. Это класс нижнего уровня (работающий с базой данных).
Можем вообще не передавать туда никакого объекта. Можем бахнуть соединение непосредственно в метод, с записью в приватное свойство. Вот так $this->dbObject = new PDO(‘mysql:host=localhost;dbname=persi’, ‘Username’, ‘pass888’); Хардкод наше всё!
Но вот в чём сложность. Если мы так сделаем, то в будущем, при изменении источника данных (допустим я захочу использовать SQLite вместо MySQL), мне придётся вносить правки в класс верхнего уровня.
Поэтому, лучше создать интерфейс DBConnectInterface и имплементировать его к классу MySQLConnect. А в __construct подать объект не как MySQLConnect $dmObject, а как DBConnectInterface $dmObject.
Таким образом, при изменении источника данных, мы создадим для него класс, а к классу имплементируем всё тот же интерфейс DBConnectInterface, и для класса верхнего уровня ничего не изменится. Он как получал объект типа DBConnectInterface, так и будет получать его дальше.
Вот такой вот «камушек», об который можно споткнуться при работе, если не знать.
Почему я прервал серию постов «Побег из зада»? Да просто подъехали дела, которые нужно сделать, и я погрузился.
И вот, копая информацию в сети, вдруг узнал, что мои знания по Битриксу устарели. При том, устарели безнадёжно. Т.е. для текущих задач имеющихся скилов более чем достаточно. Но продвинутых конторах с Битриксом работают по другому.
Первая реакция — депрессия. Это когда начинает казаться что всё. Что единственное доступное решение, просто уйти в закат. В такие минуты очень помогает ролик Dance Monkey.
Смотрю и где-то в груди что-то закипает, прорываясь наружу решением типа: А вот хрена вам полную ложку! Да я делал вещи, от которых у одних обывателей в штанах резко добавится калу в первые же секунды, а у других напрочь зависнет головной мозг, и при том, возможно, навсегда.
Так неужели не справлюсь с какой-то фигнёй для тупых??! Да ещё и в депрессию впадать??!!! Идите лесом!!!
И с этим настроем, вгрызаюсь в задачу снова и снова.
Потому, что!
Напишите комментарий