Search
Write a publication
Pull to refresh
4
0
anotherpit @anotherpit

Пользователь

Send message

Когда объектов не достаточно

Reading time13 min
Views9.5K

Я искал материалы об истоках объектно-ориентированного программирования. Причина была в том, что в сообществе Laravel возникла тенденция использовать паттерн Action и говорить вот что такое «настоящее ООП». У меня возникли некоторые сомнения, и вместо того, чтобы задавать вопросы, я решил поискать ссылки времён Smalltalk. Нашёл книгу Smalltalk, Objects, and Design. И мне было так интересно её читать, что я решил поделиться с вами своими находками.

Паттерн Action гласит, что логику нужно обёртывать в классы Action. Эта идея не нова, в других сообществах продвигалась «Чистая архитектура», при которой каждый «сценарий использования» (или Interactor) должен являться самостоятельным классом. Всё очень просто. Но об этом ли говорит ООП?

Если вам интересна суть статьи, то:

  • Smalltalk был одним из первых ООП-языков. Он стал источником таких концепций, как наследование и обмен сообщениями (или как минимум он их популяризировал, насколько я вижу).
  • Как сказал Алан Кей, придумавший термин «объектно-ориентированное программирование», объектов не достаточно. Они не обеспечивают нам архитектуру. Объекты — это про взаимодействие между ними, и в случае с большими системами вам нужна возможность разделения приложения на модули, которые можно отключать по отдельности, заменять и включать снова в общую систему, не кладя при этом всё приложение. В этом контексте Алан предлагает идею инкапсуляции «сообщений» в классы, когда каждый экземпляр является сообщением в системе, подкрепляя идею наличия в Чистой архитектуре классов «Action» или «интеракторов».

Продолжайте читать, если я разжёг в вас интерес.
Читать дальше →

Еще немного про сервисный слой в PHP

Reading time7 min
Views30K

В жизни каждого разработчика наступает момент, когда одного понимания популярных паттернов и правил написания чистого кода начинает не хватать. Обычно это происходит, когда на поток поступает проект сложнее типового сайта-каталога. При создании такого проекта очень важно заложить правильную архитектуру (особенно, если проект долгосрочный), которая будет способна максимально гибко и быстро адаптироваться под новые требования бизнеса.

Сегодня мы поговорим об одном из способов организации бизнес логики - сервисном слое (он же service layer), когда и зачем его нужно применять, а также какие проблемы архитектуры он поможет решить. Примеры реализации будут показаны с использованием архитектурного паттерна MVC и фреймворка Laravel.

Читать далее

Как дойти до CQRS, если у тебя PHP

Reading time8 min
Views8.6K

Недавно я посмотрел доклад «Как перестать бояться CQRS». Вроде бы простая идея, но есть нюансы. Так и появился этот выпуск.

CQRS vs CQS (не перепутай)

Читать далее

Реализация архитектуры Redux на MobX. Часть 1: «Проблемные места Redux»

Reading time11 min
Views11K

Эта часть статьи будет об осмыслении составляющих Redux. Так ли они необходимы, что является их аналогом. Также будет предложена более удобная альтернатива хука useReducer.

На самом деле, я не буду воспроизводить Redux. Вместо этого, в следующей части будет описано, как спроектировать более удобную архитектуру с использованием MobX. Следующая часть в основном для тех, у кого проекты на MobX получались запутанными, с неконтролируемыми изменениями.

В этой части статьи я хочу показать, что:

— редьюсеры - это аналог обычных чистых функции для получения нового состояния.

селекторы - это аналоги обычных функций с мемоизацией, которые возвращают данные.

— dispatch + action + action creators - это аналог обычных вызовов функций, и разбиение на dispatch, action, action creators является зачастую ненужным и используются не к месту.

Читать далее

Опенсорс-бот для Slack, который поможет базово трекать SLA в хелпдесках

Reading time4 min
Views3.4K


«Лебовски» создавался для биллинга (отсюда и название), но быстро прижился везде, где была нужна простая статистика по хелпдескам.

Все началось в декабре 2019-го. Ко мне пришли проджекты и тестировщики из биллинга: «Есть канал в Slack, куда мы кидаем обращения по проблемным платежам. Хотим вести по ним статистику: смотреть, какие типы обращений встречаются чаще, понимать, сколько времени заняло решение».

Slack не дает циферок, но многим их хочется. Поэтому есть вариант интегрироваться с Jira, затем строить графики в Redash или Grafana. Тут кажется, что нужна помощь аналитика — но для простых случаев это как гвозди микроскопом забивать. Зацепившись за слово «статистика», я подумал о таблицах: в них можно считать всякие метрики с помощью формул, а если понадобится что-то сложнее — аналитики смогут настроить выгрузку данных.
Читать дальше →

Создаем веб-приложение на Haskell с использованием Reflex. Часть 1

Reading time11 min
Views9.3K

Часть 2.


Часть 3.


Введение


Всем привет! Меня зовут Никита, и мы в Typeable для разработки фронтенда для части проектов используем FRP-подход, а конкретно его реализацию на Haskell – веб-фреймоворк reflex. На русскоязычных ресурсах отсутствуют какие-либо руководства по данному фреймворку (да и в англоязычном интернете их не так много), и мы решили это немного исправить.


В этой серии статей будет рассмотрено создание веб-приложения на Haskell с использованием платформы reflex-platform. reflex-platform предоставляет пакеты reflex и reflex-dom. Пакет reflex является реализацией Functional reactive programming (FRP) на языке Haskell. В библиотеке reflex-dom содержится большое число функций, классов и типов для работы с DOM. Эти пакеты разделены, т.к. FRP-подход можно использовать не только в веб-разработке. Разрабатывать мы будем приложение Todo List, которое позволяет выполнять различные манипуляции со списком задач.


Читать дальше →

Паттерн CQRS: теория и практика в рамках ASP.Net Core 5

Reading time8 min
Views78K

Скорость разработки и производительность программистов могут отличаться в зависимости от их уровня и используемых в проектах технологиях. Для проектирования ПО нет стандартов и ГОСТов, только вы выбираете, как будете разрабатывать свою программу. Один из лучших способов повысить эффективность работы — применить шаблон проектирования CQRS. 

Существует три вида паттерна CQRS: Regular, Progressive и Deluxe. В этой статье я расскажу о первом — классическом паттерне Regular CQRS, который мы используем в DD Planet в рамках разработки онлайн-сервиса «Выберу.ру». Progressive и Deluxe — более сложные архитектуры и влекут за собой использование обширного набора абстракций.

Я поделюсь опытом своей команды: как мы применили паттерн CQRS в наших бизнес-приложениях и беспроблемно внедрили его в существующие проекты, не переписывая тысячи строк кода.

Читать дальше

«Переверни игру»: тем, кто стримит лоу-фай музыку, не нужны ни деньги, ни карьера в музыкальной индустрии

Reading time4 min
Views12K

В 70-е начинающие музыканты не могли позволить себе дорогостоящую аудиотехнику и аренду студий, поэтому качество их записей оставляло желать лучшего. Так появился «lo-fi», к которому имели отношение даже ранние The Beatles. Однако термин быстро переосмыслили — в эпоху кассет за ним стояли те, кто намеренно отказывался от борьбы за чистый звук и видел в этом особый способ самовыражения. Но к моменту появления YouTube-стримов, лоу-фай стал совершенно другим, и под ним уже понимали самодостаточное музыкальное направление.

Поговорим об этом подробнее и обсудим, как обстоят дела у лоу-фай стримеров.

Читать далее

Symfony и Гексагональная архитектура

Reading time8 min
Views15K

В данной статье мы коротко пройдемся по теории и на практике разберемся как перевести любое Legacy приложение на гексагональную архитектуру. Повествование будет в контексте фреймворка Symfony и PHP 7.4, но синтаксис приведенных примеров настолько прост что вы без труда поймете как сделать так же на вашем языке программирования (если он поддерживает ООП).


За свою карьеру я работал над многими проектами Symfony, и одна из самых частых проблем, с которыми клиенты звонят в нашу компанию, заключается в том, что их программное обеспечение «заблокировано» старой версией фреймворка или оно стало необслуживаемым, потому что поиск и исправление ошибок обходится слишком дорого.

Читать дальше →

Автогенерация тестов на Puppeteer встроена в Chrome DevTools

Reading time3 min
Views21K

В Chrome 89 в DevTools добавлена экспериментальная поддержка автогенерации JS-скриптов на Puppeteer.

Схематично это работает так: вы открываете нужную страницу, в DevTools включаете запись действий, и после делаете что-то на странице обычным образом (кликаете по ссылкам и кнопкам, переходите на другие страницы, вводите текст). По мере выполнения действий браузер наполняет DevTools-вкладку с виртуальным файлом записи JS-кодом, описывающим через API Puppeteer все действия. После этого запись можно остановить, и сохранить полученный код в виде реального JS-файла.

Для демонстрации новой функциональности (названной Puppeteer Recorder) авторы подготовили небольшую демо-страницу (хотя проверять можно на любой странице, никаких предварительных условий от сайта не требуется).

Но сперва, поскольку это ещё ранняя экспериментальная функция (хотя авторы планируют развивать и расширять Puppeteer Recorder), её нужно включить в настройках DevTools, на вкладке Experiments, в виде пункта Recorder:

Читать далее

Taiga UI — библиотека компонентов под Angular, которую вам стоит попробовать

Reading time5 min
Views24K

Привет!

Саша Инкин и я регулярно пишем на Хабр статьи по Angular. Почти все они основаны на нашем опыте разработки большой библиотеки компонентов.

Эту библиотеку мы развиваем, перерабатываем и дополняем уже несколько лет, а свои идеи проверяем на нескольких десятках проектов Тинькофф Бизнеса и внутренних систем компании. Мы рады сообщить: выложили нашу библиотеку в открытый доступ!

В этой статье хочу описать основные концепции и практики, на которых строится библиотека, а также рассказать, почему ее стоит внедрить как в новые проекты, так и в уже готовые — с иными компонентами или UI Kit’ами.

Что там за Taiga UI?

Код на React и TypeScript, который работает быстро. Доклад Яндекса

Reading time16 min
Views29K
Евангелисты Svelte и других библиотек любят показывать примеры тормозящих компонентов на React. React и TypeScript дают много возможностей создавать медленный код. После доклада Виктора victor-homyakov вы сможете писать более производительные компоненты без усложнения кода.

— Здравствуйте, меня зовут Виктор, я один из разработчиков страницы поиска Яндекса. На ней каждый день сотни миллионов пользователей вводят свои запросы, получают страницу со ссылками или сразу с правильными ответами. Из-за такого количества запросов нам очень важно, чтобы наш код работал оптимально. И, конечно, я сразу должен затронуть тему преждевременной оптимизации кода.
Читать дальше →

Нотной грамоте учат неправильно*

Reading time11 min
Views254K

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


Предполагается, что студент должен страдать самостоятельно освоить ноты, путем многократного повторения. И вообще, если «ниасилил», значит у тебя нет Таланта — иди мести двор.


Представьте что было бы, если бы обычной грамоте учили так же. Но мы, почему-то, в большинстве своем читать и писать таки научились.


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


* Дисклеймер

Прошу прощения, если заголовок статьи показался вам чересчур дерзким и провокационным. Таковым он, в общем-то, и является.


Я ни в коем случае не умаляю заслуг преподавателей, вкладывающих душу в своих учеников, как не умаляю и важности музыкальной теории и сольфеджио. Я всего лишь пытаюсь по иному взглянуть на самые первые шаги в изучении нотной грамоты с точки зрения музыканта-самоучки.


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


Эффективность я оценивал исключительно на себе, поскольку сей субъект оказался самым доступным для исследования.

Читать дальше →

ECMAScript 4: версия, которой не было

Reading time4 min
Views5.5K

Вы наверняка заметили, что в системах сборки кода используются спецификации ECMAScript 3, затем ECMAScript 5 и так далее. ECMAScript 4 не используется никогда. Почему?

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

Согласно Википедии, первая версия ECMAScript 4 появилась в феврале 1999 года. Работу над спецификацией планировалось завершить к августу 2008 года.

Язык ECMAScript 4 был перспективной разработкой, в нем появилось множество новых возможностей, которых очень не хватало в ECMAScript 3. В четвертой редакции были исправлены некоторые недочеты ECMAScript 3, в связи с чем ES4 стал несовместим предыдущими версиями.

С самого начала вокруг ES4 разгорелось много споров, большинство разработчиков браузеров новинку не поддержали, и работу над ES4 пришлось прекратить.

В 2008 году от ES4 официально отказались, а стандарт ES3.1 переименовали в ES5. Это было более скромное, корректировочное обновление ECMAScript.

Пожалуй, в то время больше всего на ES4 был похож ActionScript 3 для Flash-приложений. После выпуска AS3 некоторые из нас даже думали, что Flash и веб в конце концов станут единым целым.

Читать далее

Декларативный подход в Angular

Reading time10 min
Views12K

Когда я впервые услышал про compliant-механизмы, был весьма впечатлен. Хоть они и окружают нас в повседневности — в виде застежек рюкзака, кнопок мыши или колпачков от шампуней, — мы редко задумываемся о концепции таких устройств.

Если говорить кратко, в compliant-механизме для обеспечения его технических характеристик используют деформацию. В то время как в традиционной технике (rigid body) гибкость зачастую является негативным качеством материала, сompliant-механизмы используют ее для передачи силы и движения в нужном направлении, вместо соединений из нескольких подвижных деталей.

Узнать, к чему это я

Как я хотел разнообразить ретроспективы, а сделал собственную карточную игру

Reading time7 min
Views13K
Картинка с названием статьи

В этой статье хочу поделиться своей историей геймификации ретроспективы: как с помощью придуманной мной карточной игры нам удалось разнообразить процесс, сделать встречу нескучной и вовлечь в обсуждение всех участников команды. А также расскажу о нюансах печати своих карточек для игр.
Читать дальше →

Все ли вы знаете о React key?

Reading time5 min
Views12K

Привет, Хабр!


Я время от времени провожу собеседования, и когда вопрос касается React key, чаще всего я вижу недоумевающий взгляд, намекающий “Да, там и спрашивать вроде нечего?”. Если Вам кажется React key понятным и простым, тогда давайте проведем мини собеседование (данная статья является расшифровкой видео).

Читать дальше →

Ценности DDD

Reading time10 min
Views38K
Основоположником DDD (Domain Driven Design, предметно-ориентированное проектирование) является Эрик Эванс, который в довольно далеком 2003 году подарил миру свою знаменитую книгу о предметно-ориентированном проектировании. Безусловно, не все, что описано в книге придумал автор с нуля. Многие идеи и практики существовали и до него, но у Эванса получилось все это систематизировать и правильно расставить акцента. Давайте попробуем разобраться, что же именно предлагает Эванс.
Читать дальше →

Typescript: Объединение типов в глубину

Reading time6 min
Views30K

Пошаговое руководство о том, как в TypeScript написать такой generic-тип, который рекурсивно объединяет произвольные вложенные key-value структуры данных. Это может оказаться несколько более сложной задачей, чем вы думаете.

Подробнее

Почему мы выбрали MobX, а не Redux, и как его использовать эффективнее

Reading time8 min
Views45K

Меня зовут Назим Гафаров, я разработчик интерфейсов в Mail.ru Cloud Solutions. На дворе 2020 год, а мы продолжаем обсуждать «нововведения» ES6-синтаксиса и преимущества MobX над Redux. Существует много причин использовать Redux в своем проекте, но так как я не знаю ни одной, расскажу о том, почему мы выбрали MobX.

Почему?

Information

Rating
Does not participate
Registered
Activity