Как стать автором
Обновить
20
0
Алексей @f3ath

Иногда я не программирую

Отправить сообщение

Композиция или наследование: как выбрать?

Время на прочтение9 мин
Количество просмотров143K

В начале...


… не было ни композиции, ни наследования, только код.


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


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


Мрачные были времена.


Но вот лучик ООП воссиял над миром… Правда, несколько десятилетий1 никто этого не замечал. Покуда не появился графический интерфейс2, которому, как выяснилось, очень-очень не хватало ООП. Когда нажимаешь на кнопку в окне, что может быть проще, чем отправить кнопке (или ее представителю) сообщение "Нажатие"3 и получить результат?


И вот тут ООП взлетел. Было написано множество4 книг, расплодились бесчисленные5 статьи. Так что сегодня-то каждый может в объектно-ориентированное программирование, так?


Читать дальше →
Всего голосов 47: ↑42 и ↓5+37
Комментарии100

Боятся ли PHP-разработчики функций?

Время на прочтение3 мин
Количество просмотров16K
Недавно я обратил внимание на одну вещь, которая стала меня беспокоить: PHP-программисты не используют функции.

Пожалуй, слишком сильное обобщение, поэтому уточню: PHP-разработчики, достичшие определенного уровня мастерства, практически перестают писать обычные функции, вместо них сплошные классы и методы. Во всяком случае, такое впечатление складывается, когда смотришь код библиотек и фреймворков с открытым кодом. Все “крутые” библиотеки используют разве что анонимные функции, и только.
Читать дальше →
Всего голосов 69: ↑37 и ↓32+5
Комментарии60

Runkit + PHPUnit = 100% покрытие тестами

Время на прочтение7 мин
Количество просмотров3.6K
Здравствуйте, уважаемые коллеги.

Одним из косвенных показателей качества кода считается code coverage — степень покрытия его тестами (как правило, имеются в виду модульные тесты). В большинстве случаев за coverage принимается соотношение количеству строк кода, в котрое попадает управление во время прогона тестов, к общему числу значимых (не являющихся комментарием, пустой строкой, или, например одной фигурной скобкой, обозначающей начало или конец блока) строк кода модуля.

Другим же условием хороших тестов является отсутствие сторонних эффектов (side effects), как например создание/удаление файлов, установка сетевых соединений, запись в порты и т.д.

Однако, когда дело касается модуля, взаимодествующего с внешним миром, эти два требования вступают в противоречие. И ладно, если речь идет о файловых операциях, когда на помощь приходит vfsStream. Но что делать, когда надо тестировать, скажем, прямую работу с сокетами или код, использующий функции curl_*?

Под катом вы найдете мое решение и, в качестве бонуса, еще одну ОПП-обертку к курлу, полностью покрытую тестами.
Читать дальше →
Всего голосов 35: ↑33 и ↓2+31
Комментарии16

PDO: сериализация, поздняя инициализация и PHPUnit

Время на прочтение1 мин
Количество просмотров1.5K
Здравствуйте. Как известно, PDO не поддерживает сериализацию. С этим связано несколько интересных вещей, в частности сюрпризы с трейсами и невозможность сделать mock от PDO в PHPUnit.

Я активно использую PHPUnit и реализуя в очередной раз паттерн Dependency Injection столкнулся с описанными трудностями создания Mock-объекта от PDO.

И что же получилось?
Всего голосов 15: ↑10 и ↓5+5
Комментарии4

Информация

В рейтинге
Не участвует
Откуда
San Francisco, California, США
Зарегистрирован
Активность