Pull to refresh
8K+
53
Alex Gusev@flancer

Я кодирую, потому что я кодирую…

9,2
Rating
99
Subscribers
Send message

DI, PHPUnit и setUp

Reading time2 min
Reach and readers11K
Инверсия зависимостей (Dependency Injection) — весьма приятная вещь, во многом облегчающая жизнь разработчику. Но она же и является причиной появления таких вот конструкторов:

public function __construct(
    \Psr\Log\LoggerInterface $logger,
    \Zend_Db_Adapter_Pdo_Abstract $dba,
    ISomeService $service,
    ...
) {
    $this->_logger = $logger;
    $this->_dba = $dba;
    $this->_service = $service;
    ...
}

Использование setUp() в unit-тестах может существенно облегчить жизнь, если нужно несколько раз создать один и тот же набор mock'ов для тестирования различных особенностей реализации разрабатываемого класса.
Читать дальше →

Пример модуля для Magento 2 другимъ манеромъ

Reading time4 min
Reach and readers9.5K
Осенью прошлого года, когда вышла Magento 2.0, я написал статью "Пример модуля для Magento 2", в которой обрисовал один из возможных вариантов формирования окружения для разработки модуля под вторую версию Magento. Совсем недавно вышли обновления (v 2.0.1 и v 2.0.2), судя по которым разработчики Magento уходят от схемы развертывания с использованием Magento Composer Installer (при помощи которого разворачивается Magento 1 и разворачивалась в моем предыдущем примере Magento 2.0.0), По крайней мере, простое изменение версии Magento c 2.0.0 на 2.0.1 приводило к тому, что то, что разворачивалось, работать как Magento-приложение совершенно не хотело.

Под катом — новый пример развертывания окружения, адаптированный под изменившиеся условия.
Читать дальше →

Универсальный контейнер данных

Reading time6 min
Reach and readers8.8K
В последние лет 5 я, по большей части, имею дело с приложениями на базе Magento, в основу которой заложены идеи максимальной гибкости, расширяемости и адаптивности. Популярность Magento в e-commerce и количество сторонних модулей расширений к ней говорят о том, что эта платформа и реализованные в ней идеи скорее успешные, чем наоборот. В основу большого количества объектов в Magento заложена концепция универсального контейнера данных (Varien_Object в Magento 1 и \Magento\Framework\DataObject в Magento 2). Я нахожу у подобных универсальных контейнеров определенные параллели с такими явлениями, как
  • POJO (Java)
  • JSON
  • XPath
  • DOM
  • СУБД (реляционные и не очень)
  • SPA (Single Page Applications)
ну и в конце концов — с Гарвардской архитектурой ЭВМ, разработанной Говардом Эйкеном в 1930-х годах.
Читать дальше →

Области сокрытия кода и рефакторинг

Reading time5 min
Reach and readers735

Одним из главных аспектов при разработке программного обеспечения вообще и web-приложений в частности я считаю способность программного обеспечения быть изменяемым — адаптируемым к изменениям окружающего мира. Это не значит, что разработчик должен заранее предусмотреть будущие изменения среды обитания своего кода, это значит, что код должен переносить множество циклов рефакторинга, оставаясь при этом работоспособным как можно дольше. А для этого нужно, чтобы последствия изменений, вносимых в код, были либо обозримы, либо предсказуемы. Под катом я суммировал свое понимание областей сокрытия кода, сформировавшееся в результате тесных, практически интимных, отношений с Magento 2 (платформой для построения интернет-магазинов). Изложенное ниже относится во-первых, к языку PHP, во-вторых — к web-приложениям, в-третьих — ко всему остальному.

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

Пример модуля для Magento 2

Reading time6 min
Reach and readers23K


Данная статья устарела. Вот новая.



На неделе пощупал пример создания модуля для Magento 2. В ходе прощупывания пытался сформировать рабочее окружение по аналогии с выработавшимся у нас на данный момент окружением для разработки модулей под Magento 1.

  • размещение кода модуля в репозитории Github'а;
  • подключение модуля к Magento-приложению при помощи Composer'а;
  • автоматизация процесса развертывания девелоперской/тестовой версии Magento;

Под катом ссылка на github-проект с примером модуля под Magento 2 с (полу)автоматическим развертыванием среды для его разработки.
Читать дальше →

Как правильно организовать распределенное проектирование БД?

Reading time4 min
Reach and readers3.9K
В последнее время я занимался развертыванием проектов на базе таких приложений как Magento и Odoo (OpenERP). Оба приложения позволяют сторонним разработчикам создавать модули/расширения, встраиваемые в основное приложение. С Odoo у меня опыта поменьше, но вот с Magento я общался довольно плотно. И вопрос, который у меня возник, я вынес в заголовок статьи.
Читать дальше →

Использование Log4php в Magento-приложениях

Reading time7 min
Reach and readers4.8K
Magento без сомнения является выдающейся системой для построения e-commerce приложений. Принципы, заложенные в ее архитектуру, позволили не только занять первое место рейтинга в своем классе web-приложений и удерживать его многие годы, но, что более важно, сформировать вокруг себя эко-систему разработчиков, создающих для основного функционала расширения, удовлетворяющие самым экзотическим требованиям пользователей. Но вот чего мне сильно очень сильно не хватало в Magento при первом «подходе к снаряду», так это системы логирования уровня Log4php. Поэтому первое расширение, которое было сделано для Magento — это «обертка» для Log4php. Под катом описание того, как мы используем эту «обертку» в наших Magento-проектах.
Читать дальше →

Создание плагина для PHP Composer'а

Reading time4 min
Reach and readers11K
При развертывании Magento-приложений с использованием Magento Composer столкнулись с проблемой, что различные экземпляры одного и того же приложения (девелоперский, тестовый и т.д.) должны использовать различные локальные настройки (например, параметры подключения к БД). До этого, в другом проекте, использовался подход, когда в приложении (под контролем версий) находятся шаблоны конфигурационных файлов с placeholder'ами и скрипт, замещающий placeholder'ы локальными значениями и копирующий результат в нужное место. Локальные значения хранились отдельно для каждого экземпляра по месту развертывания. Хотелось привычный подход сохранить и для нового метода развертывания. Поиск устраивающего плагина на packagist.org завершился ненахождением, в силу чего и родилась идея сделать подобный плагин самостоятельно. При создании плагина пришлось надергать информацию из различных источников — информации с сайта Composer'а по плагинам оказалось недостаточно. Что и привело к написанию этой статьи.
Читать дальше →

Разработка Magento-модулей с развертыванием приложения через Magento Composer

Reading time7 min
Reach and readers11K

Введение


В статье описан опыт развертывания девелоперской версии Magento-приложения с использованием Magento Composer'а. Структура типового Magento-приложения в нашей компании:
  • Magento
  • Сторонние модули, используемые в проекте
  • Разрабатываемые нами модули, используемые более, чем в одном нашем проекте
  • Разрабатываемый нами модуль, содержащий функционал конкретно для данного проекта
  • Тема для конкретного проекта


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

В связи с началом нового проекта для развертывания Magento-приложений решили попробовать Magento Composer. На данный момент у нас код каждого проекта хранится в своем SVN-репозитории, плюс в отдельном — все разрабатываемые нами модули (как общие, так и специализированные):
  • инсталляция Magento и сторонние модули для проекта 01;
  • инсталляция Magento и сторонние модули для проекта 02;
  • ...
  • наши модули;


Для использования Magento Composer'а проект разделили на следующие части (каждая в своем git-репозитории):

  • z_mage_composer_prj_01_full: скрипты развертывания всего проекта, тема, сторонние модули, не доступные через Magento Composer;
  • z_mage_composer_mod_01: первый модуль, от которого зависит проект;
  • z_mage_composer_mod_02: второй модуль, от которого зависит проект;


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

Использование различных VCS репозиториев в PhpStorm

Reading time2 min
Reach and readers18K

Введение


При развертывании проектов основанных на модульных приложениях (например, Magento) сталкиваешься с тем, что в проекте сосуществует код, находящийся в различных репозиториях. PhpStorm вполне хорошо справляется с подобной ситуацией. Допустим, у нас есть основной проект, расположенный на Github'е, в котором используются один новый модуль, расположенный там же, и один legacy-модуль, расположенный в SVN-репозитории:


Работать одновременно с несколькими git-репозиториями позволяет механизм git submodules, а PhpStorm также позволяет к этому добавить и SVN-репозиторий.
Читать дальше →

PhpStorm в Ubuntu 14 с использованием в Windows 7 через Xming

Reading time3 min
Reach and readers9.3K
Возникла задача плавной миграции с рабочей станции под Windows на Ubuntu. Так как выполнение основных действий при помощи компьютера никто не отменял, то миграцию приходится делать кусками, оставляя доступной привычную среду (Windows 7 x64). Так как я являюсь разработчиком, то первым делом нужно переносить IDE (в моем случае — PhpStorm). Целевой машиной для переноса был выбран виртуальный хост hamster, работающий под Ubuntu, на котором тестриуются наши проекты.

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 14.04.1 LTS
Release:        14.04
Codename:       trusty
$ uname -a
Linux hamster 3.13.0-43-generic #72-Ubuntu SMP Mon Dec 8 1
Читать дальше →
12 ...
7

Information

Rating
866-th
Location
Рига, Латвия, Латвия
Date of birth
Registered
Activity

Specialization

Фулстек разработчик
Ведущий
From 3,000 €
JavaScript
HTML
CSS
Node.js
Vue.js
Веб-разработка
Progressive Web Apps
PostgreSQL
MySQL
GitHub