Рубрика «Проектирование и рефакторинг» - 67

Изменять код
В процессе разработки программного обеспечения нет такого понятия, как «стагнация». Все, что вы разрабатываете сейчас — просто очередная версия компонента, который вероятно будет меняться в будущем. Изменение является самой распространенным явлением в мире разработки программного обеспечения и вам лучше принять это как факт. Рассчитывайте на возможные изменения всего, что вы разрабатываете и поэтому проектируйте ваш код более модульным. Это упрощает изменения и в тоже время увеличивает качество кода. Старайтесь придерживаться концепций DRY и YAGNI. Вы часто будете в ситуации когда вы смотрите на ваш код и представляете, что вы могли бы сделать это лучше. Так пусть эта мысль не мешает вам спать. Садитесь сразу за дело и рефакторинг! Если не сделаете это сейчас, вы возможно никогда этого не сделаете. Чем дольше ждете, тем сложнее и дороже это будет. И это может вырасти в лишнюю головную боль с которой не захочется связываться.
«Хороший код — это код который легко изменять. Код стремится измениться до момента, когда его уже не легко изменять. Весь код становится плохим кодом.» Неизвестный автор.
Читать полностью »

Начиная с версии 5.4.0, в PHP появится новая конструкция языка — трейты (traits), реализующая возможность использования примеси (mix in). Механизм примесей является еще одним механизмом повторного использования кода и присутствует в том или ином виде в других языках, например, Ruby, Python, Common Lisp, etc.

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

Следует отметить, что реализации примесей в PHP существуют как минимум с версии 4.0.1, и в настоящее время присутствуют, чаще всего под именем behavior, в ряде популярных фреймворков, например, в Yii, Symfony, Doctrine, CakePhp, Propel.

Цель статьи — продемонстрировать и сравнить несколько основных подходов к реализации примесей в PHP до версии 5.4.0, базирующихся только лишь на функциях самого языка и не использующих сторонние расширения, как-то, например, функцию runkit_method_copy из PECL runkit.
Читать полностью »

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

Все основано на реальных событиях, но примеры были максимально упрощены, чтобы в них осталась лишь суть проблемы.
Читать полностью »

Преамбула

Я разработчик в небольшой организации. Цель моей работы — делать людям хорошо. Я ускоряю их работу, добавляя тот или иной функционал к уже существующему продукту, моими клиентами являются сотрудники самой организации. Современный бизнес очень динамичен, каждый день появляются новые идеи и потребности, то есть мой план расписан на год вперед, и каждый месяц перестраивается под новые задачи.
 
Однако, на фоне, казалось бы, динамично растущего бизнеса (кол-во сотрудников увеличивается на 10-15 человек в год) отдел IT растет значительно медленнее. Основное требование к выполняемой работе: “Быстро!”, как следствие плохо масштабируемый код, подверженный плавающим ошибкам.
 
Сейчас наша компания переживает новый виток развития ПО (период 5 лет), постепенно мы отказываемся от старых разработок и переписываем то, что есть, придерживаясь объектной модели и паттернов, а заодно и переезжаем на новые сервера (новые железо + софт), но требования остались на прежнем уровне — все должно быть  сделано вчера.
 
В очередной раз при релизе кода работа сотрудников была парализована на пару часов, и ген. директор спросила: “Ребята, сколько это еще будет продолжаться?”, на что я ответил: “Когда завершится переезд”, а спустя сутки прислал более подробный ответ, описав то, что меня волнует в последнее время все больше и больше.
 
Зачем я это рассказываю? А затем, что моя история не уникальна. Кому-то эта статья даст пищу для размышлений, а то и подтолкнет к действиям. Кто-то поделится своим опытом, а кто-то в очередной раз порадуется, что у него в компании все намного лучше.
Читать полностью »

В этой части моего цикла стсатей про Model-View в QML мы начнем рассматривать представления и начнем с тех, которые делаются на основе готовых компонентов.

Содержание:

  1. Model-View в QML. Часть нулевая, вводная
  2. Model-View в QML. Часть первая: Представления на основе готовых компонентов

Читать полностью »

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

Если сковородка может сломаться через пол года, можно взять дешёвую сталь, простое покрытие и китайских рабочих. Если нужен срок жизни в десять лет, то придётся брать хорошие материалы, дорогие технологии и made in Germany.

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

Но при этом «быстро и просто» не значат «плохо».

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

И вот тут я хочу напомнить почему-то забываемый всеми момент.

Авралы, расходы и головную боль мы поимеем только тогда, когда система закрыта. Если она открыта, все эти радости достанутся кому-нибудь другому.
Читать полностью »

Добрый день! Долго думал, писать пост или нет. Но буквально на днях появился утвержденный календарь ЧР по футболу 2013/2014, и вот под впечатлением сие текст…
Что мы видим, взглянув на расписание игр.
Тур 16: 2 ноября Краснодар-Кубань и Зенит — Амкар… Навскидку в Краснодаре +10, в СПб -5.
Тур 17: 9 ноября Урал-Ростов: в Екатеринбурге -10, в Ростове — на –Дону +10, Рубин – Краснодар, аналогично…
Также и 23, 30 ноября, 7 декабря, 8 марта, 15 марта, прогресс шагает семимильными шагами, но обходит руководителей российского футбола стороной… В тоже время в мае, июле, августе многие «северные» команды приезжают в гости на юг, в самую жару, для того чтобы получать «солнечные удары»…?! «Такой хоккей нам не нужен!»
Читать полностью »

Данный пост расскажет об уникальной фишке D — Voldemort типы. Типы, которые можно использовать, но нельзя назвать. Данное название не очень подходит им, но Walter Bright очень любит так их называть. Voldemort типы очень часто встречаются в стандартной библиотеке Phobos, особенно в модулях std.algorithm и std.array. Осваивающие D могут часами штудировать документацию в поисках типа, возвращаемого из splitter или joiner, а возвращают они именно Voldemort типы. После этого поста можно смело открывать исходники std.algorithm, ибо никакие Сами-Знаете-Кто вам будут не страшны.

Он самый

Иногда, взаимодействие существующих возможностей может привести к неожиданным сюрпризам. Мне нравится считать, что мы изначально заложили Voldemort типы в D, но на самом деле они были найдены Андреем Александреску. Что это за Voldermort типы? Читайте дальше.

Читать полностью »

Одним из наиболее распространенных и эффективных приемов проектирования программ является использование шаблона программирования MVC (Model-View-Controller) — Модель-Представление-Контроль. MVC позволяет разделить части программы, отвечающие за хранение и доступ к данным, отображение данных и за взаимодействие с пользователем на отдельные слабо связанные модули. Подобное разделение ответственности упрощает структуру программы и позволяет вносить изменения в одну из этих частей не затрагивая остальные.

Такой подход активно применяется в Qt, а в QML вообще является краеугольным камнем. Так что тем, кто изучает QML понимание принципов MVC будет совсем не лишним.
Читать полностью »

Здравствуйте, уважаемые хабрачитатели. В этой статье я хотел бы поделиться знаниями об одном небольшом и простом, но полезном шаблоне, про который обычно не пишут в книжках (возможно, потому, что он является частным случаем шаблона «Команда»). Это шаблон «Правила» (Rules Pattern). Вероятно, для многих он будет очень знакомым, но кому-то будет интересно с ним познакомиться.

Множественные ветвления и шаблон «Правила»

Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js