• Прощайте, микросервисы: от ста проблемных детей до одной суперзвезды
    0
    Каковы были изначальные требования и границы\классы эквивалентности? Какие были тесты? Что изменилось?
  • Прощайте, микросервисы: от ста проблемных детей до одной суперзвезды
    0
    Не могу они изменится. Они появляются из бизнес требований. Рефакторинг\оптимизация не меняет требований.
  • Прощайте, микросервисы: от ста проблемных детей до одной суперзвезды
    0
    Я неверно понял фразу
    не имеем никаких гарантий, что при изменении реализации граничные случаи и области эквивалентности останутся теми же


    Естественно, что если меняется реализация в порядке оптимизации\рефакторинга, то тесты остаются теми же и должны остаться зелеными.
  • Прощайте, микросервисы: от ста проблемных детей до одной суперзвезды
    0
    Потому сначала нужно изменить тест.
    У нас был какой-то алгоритм с одной граничной точкой, например 10.
    Мы напилили тесты, что на значениях до 10 один результат, 10 и больше — другой.
    Пришли изменения и добавилась вторая точка, скажем 0. Мы изменяем тест, пишем что до 0 — один результат, с 0 до 10 другой, с 10 третий. Тест должен упасть, потому что реализация старая. Теперь мы правим реализацию, пока результат не совпадет с требованием теста.
  • Устаревший код – сторонний код
    0
    Не покрывается. Если старый код будет замокан, то вы протестите только, что моки работают как вы определили
  • Прощайте, микросервисы: от ста проблемных детей до одной суперзвезды
    0
    да, там не покрыты некоторые сервисные части, типа компиллер пассов. Но вся бизнес логика покрыта.
    Тесты — это не какая-то штука которую заставляют делать. Это такой же код, как и весь остальной. Он проходит ревью, пишется качественно и необходим для фиксации требований.
    Если код проходит тесты, то он соответствует требованиям. Если при этом он работает неправильно, значить требования у вас кривые и это вопрос к постановщику требований.
  • Прощайте, микросервисы: от ста проблемных детей до одной суперзвезды
    0
    Можно, если тесты — часть разработки, а не навязанная сверху обязанность.
  • Прощайте, микросервисы: от ста проблемных детей до одной суперзвезды
    0
    Проблемы в сторонних сервисах вы очевидно покрыть своими тестами не можете. Но вы можете научить ваше приложение как с ними справляться, и уже это свое решение покрыть тестами
  • Прощайте, микросервисы: от ста проблемных детей до одной суперзвезды
    0
    Кроме того — существуют внешние проблемы, как то: обрывы связи, проблемы с железом, проблемы с операционками, проблемы со сторонним железом, проблемы соответствию стандартам сторонних файлов/протоколов и т.п. И их, увы, никак не потестируешь. А крови они пьют — мама не горюй


    Это и не должно покрываться юнитами, так-то.
  • Прощайте, микросервисы: от ста проблемных детей до одной суперзвезды
    0
    Даже метод с одним целочисленным параметром потребует написать 2^64 тестов, что практически невозможно.

    Умные люди не зря предлагают использовать граничные значения и классы эквивалентности
  • PHP 8: чего ждать. Письмо Зеева Сураски
    0
    Открою тайну. Вы можете любому своему классу добавить интерфейс
    ContainerAwareInterface и даже использовать трейт ContainerAwareTrait, чтобы не имплементить этот интерфейс самому.
    Теперь симфони сама внедрит контейнер в ваш сервис и вы сможете там хоть конект к бд достать и делать что захотите.
  • PHP 8: чего ждать. Письмо Зеева Сураски
    0
    Я свичнулся в Symfony из Yii1 меньше чем за неделю. У меня не возникло вопроса «Для чего так всё переусложнено?». Более того, я был в восторге от изящества большей части компонентов (вот формы мне не зашли, да)
  • PHP 8: чего ждать. Письмо Зеева Сураски
    0
    1. Вы сколько раз в неделю обновляете версию пхп?
    2. Докер решает проблему обновлений. Просто поправьте докер файл и все взлетит.

    зы. Я согласен, что было бы круто иметь это из коробки. Но с другой стороны большинству проектов на пыхе этого не нужно. А кому нужно, тот разок заморочится с установкой расширения
  • PHP 8: чего ждать. Письмо Зеева Сураски
    0
    Почему плохо подходит то?
    Уже сейчас можно пилить на пыхе как на ноде, со всякими ReactPHP\Swoole
  • PHP 8: чего ждать. Письмо Зеева Сураски
    0
    Не думайте, что го и джава решат все ваши проблемы.
    В первую очередь на го переносят инфраструктурные вещи. Строить абстракции на го — то еще удовольствие.
    Переписывать на джаву смысла попросту нет. Начать какой-то новый микросервис, но просто выбросить рабочий код на пыхе и переписать никто не позволит.
  • PHP 8: чего ждать. Письмо Зеева Сураски
    0
    А как же VK, Facebook, Badoo?
  • Заблуждения программистов о трудоустройстве
    0
    что в 2 секунды можно сделать около 100 млн операций


    Это разве не зависит от железа?
  • Заблуждения программистов о трудоустройстве
    0
    Лимит переберет первые num записей, а потом отберет одну.
  • Заблуждения программистов о трудоустройстве
    0
    А если тебя нашли и схантили? Строить машину времени и предупреждать?
  • PHP-Дайджест № 132 (27 мая – 10 июня 2018)
    0
    Мне вот лично интересно, с чего вы решили, что они откажутся от
    yii\db\ActiveRecord
    yii\db\BaseActiveRecord
    ?
  • Реализация стейтмашины на Zend Framework3+Doctine2
    0
    Даже если это одна строчная колонка, приложение фактически должно знать, какое это значение. Иначе оно будет падать при попытке вставить какое-то другое. У вас все равно есть необходимость держать копию этого словаря в приложении.
    По большому счету какая разница, ошибка вылетит с уровня бд о нарушении констрейнта или с самого приложения, о невозможности собрать VO.
    Более того, вы экономите один запрос в бд и упадете до его выполнения.
  • Реализация стейтмашины на Zend Framework3+Doctine2
    0
    Все не так просто с БД. Есть 2 более-менее нормальных варианта поддержания целостности для «состояния».
    Первый — это ENUM. У нас есть перечисление возможных состояний и нельзя вставить в бд кривое значение. ENUM нельзя редактировать с интерфейса. ENUM вообще менять может быть довольно проблемно на больших таблицах.
    Второй — отдельная таблица-словарь состояний. В основной таблице идентификатор и внешний ключ. Можно редактировать с интерфейса, но не очень удобно работать с приложения. Теперь, чтобы приложение могло добавить новую запись с определенным состоянием, нужно сначала с БД получить идентификатор этого состояния. Сама таблица-словарь состояний в общем виде определяется двумя колонками: собственно идентификатор и какой-то алиас или тайтл. С приложения искать придется по этой второй колонке, и снова нет гарантии, что между приложением и БД не возникнет рассинхрон при очередном изменении кода или БД.

    В последнее время я начал использовать VO для таких вещей. В БД просто примитив (чаще всего SMALLINT), без ограничений и ключей, но при гидрации в объект, мы получим эксепшен о кривом значении. Пока мне кажется, что этот подход самый гибкий и простой в реализации. Любые изменения в бизнес логике состояний требуют лишь правок кода, но не изменения схемы.
  • Реализация стейтмашины на Zend Framework3+Doctine2
    0
    вынужден не согласиться про файловые конфиги


    Это было лишь примечание, что и их можно править, если сильно нужно.
  • Реализация стейтмашины на Zend Framework3+Doctine2
    0
    А как Вы обеспечите это, если конфигурация хранится в хмл/php/ini файле


    VO. Он не соберется с кривого значения и вы получите ожидаемое исключение о кривой конфигурации

    зы. даже файловые конфиги можно править из интерфейса
  • MassTransit, Saga и RabbitMQ для реализации диспетчера процессов
    0
    Форматирование кода поправить бы.
  • 10 (не) очевидных советов начинающим WEB-разработчикам
    0
    Да, но статику как-то отдавать надо же.

    Статика (возможно даже с сорсами) закатывается в отдельный вольюм и линкуется к вебсерверу и пхп
  • Как программисту переехать на Кипр
    0
    Не стоит воспринимать статью и тот сайт вцелом слишком серьёзно. Цель сайта показать самые низменные стороны отрасли, не гнушаясь преувеличений и доводя до абсурда. Да и форма повествования всегда намеренно «быдловата». Все что там написано стоит делить на два (а то и на десять). НО, как в том анекдоте, осадочек остаётся. Не слишком приятный, но зачастую полезный и помогающий избежать проблем.
    Как пример, там есть цикл статей о релокации в Польшу с одной из галлер.
  • 10 (не) очевидных советов начинающим WEB-разработчикам
    –1
    IMHO, обычно достаточно корректных заголовков и CDN-a
  • Как я тесты по программированию делал, мой маленький TIOBE и немножко долларов
    +1
    Кроме того, с целью подсветки синтаксиса для удобочитаемости, каждый вопрос и листинг я сопровождал соответствующими html тегами (разные цвета, курсив, отступы и.т.д.), это было еще муторнее и совсем не интересно.


    Можно же взять что-то типа highlight.js
  • PHP может стать еще лучше
    0
    Не статический метод вызвать статически нормально и не поулчится.
    Deprecated: Non-static method Test::method() should not be called statically
  • PHP может стать еще лучше
    0
    Вы об этом?

    /**
     * @method static void staticMethod(DocBlockTestClass $newThis, int $arg1, int $arg2)
     * @method void method(int $arg1, int $arg2)
     */
    class DocBlockTestClass {
    
        /**
         * @inheritDoc
         */
        public static function __callStatic($name, $arguments)
        {
            if ($name === 'staticMethod') {
                $arguments[0]->method($arguments[1], $arguments[2]);
    
                return;
            }
    
            throw new \BadMethodCallException('Unknown static method call.');
        }
    
        /**
         * @inheritDoc
         */
        public function __call($name, $arguments)
        {
            if ($name === 'method') {
                $this->doMethod($arguments[0], $arguments[1]);
    
                return;
            }
    
            throw new \BadMethodCallException('Unknow method call.');
        }
    
        /**
         * @param int $arg1
         * @param int $arg2
         */
        private function doMethod(int $arg1, int $arg2): void
        {
            \var_dump($arg1, $arg2);
        }
    
    }


    Статический и обычный
  • PHP может стать еще лучше
    0
    Ну… Так то IDE умеют в удаленное подключение.
  • PHP может стать еще лучше
    0
    PHP дает вам возможность гибко этим управлять.
  • PHP может стать еще лучше
    0
  • PHP может стать еще лучше
    0
    Как любой другой интерпретируемый язык спасет вас от опечатки?
    Ну а глобально — вменяемая IDE, тесты.
    В этом случае константа была корректная, но не зафиксирована версия пхп. Композер тут как раз помог бы
  • PHP может стать еще лучше
    0
    Нет, мы приходим к тому, что надо использовать composer с указанием необходимых минимальных требований к платформе (версия пхп, екстеншены и прочее)
  • PHP может стать еще лучше
    0
    Если говорить откровенно, то PHP бросает notice при обращении к неизвестной константе.

  • PHP может стать еще лучше
    0
    Вы правы, я имел ввиду первый пункт (->)
    Бес попутал.

    А вот оверхед ли? Большую часть времени вы читаете код, а не пишите. sprintf или даже просто конкатенация читаются куда как проще. Вы в свой вариант добавьте еще двойных кавычек внутрь строки и будет вообще нечитаемый треш с экранированием.
  • PHP может стать еще лучше
    0
    По поводу второго — автодополнение от IDE очень даже помогает
    По поводу третьего
    $a = sprintf('Hello %s!', $b?:'hell')
  • PHP может стать еще лучше
    +7
    Для своих целей PHP is good enough.
    А те вещи, которые действительно дорого поднимать можно запустить в виде демона, или вообще написать на другом, более подходящем языке.