Все сервисы Хабра

Сообщество IT-специалистов

Ответы на любые вопросы об IT

Профессиональное развитие в IT

Удаленная работа для IT-специалистов

Войти на сайт
  • Все вопросы
  • Все теги
  • Пользователи

Хабр Q&A — вопросы и ответы для IT-специалистов

Получайте ответы на вопросы по любой теме из области IT от специалистов в этой теме.

Узнать больше
другие проекты хабра
  • Хабр
  • Карьера
  • Фриланс
Задать вопрос
by25

Andrey Kulikovsky

Веб-разработчик
  • 35
    вклад
  • 1
    вопрос
  • 51
    ответ
  • 27%
    решений
Комментарии
  • Информация
  • Ответы
  • Вопросы
  • Комментарии
  • Подписки
  • Нравится
  • Достижения
  • Как одновременно тестировать ветки github?

    by25
    Andrey Kulikovsky @by25
    nezzard: Как вариант накидать простой баш скрипт, который будет переключать ветки и запускать тесты.
    Написано более трёх лет назад
  • Как перевести symfony 2.8 в production mod?

    by25
    Andrey Kulikovsky @by25
    Так, для каких целей необходимо? Завести на боевом серевере (на проде)?

    Если на проде:
    1. Чистим кэш: php app/console cache:clear --env=prod --no-debug
    2. Проверяем app.php должно быть new AppKernel('prod', false);
    3. Если не работает, смотрим конфиг общий app/config/config.yml и конфиг окружения config_prod.yml Может там что-то сильно различается.
    Написано более трёх лет назад
  • Где вы вызываете метод doctrine flush() для сохранения записи в БД?

    by25
    Andrey Kulikovsky @by25
    Я пишу в каждом методе контроллера, где есть операции изменения состояния системы, так более явно.
    Зачем? У нас могут быть простые выборки, зачем дергать каждый раз flush?
    Написано более трёх лет назад
  • Как прописать путь к public файлам AppBundle?

    by25
    Andrey Kulikovsky @by25
    Как раз параметр --symlink должен создавать символическую ссылку на папку AppBundle/Resources/public => web/bundles/app.
    Команада mklink для винды, ln для никсов.
    Написано более трёх лет назад
  • Как прописать путь к public файлам AppBundle?

    by25
    Andrey Kulikovsky @by25
    Будет работать. Попробуйте открыть консоль с правами администратора.
    Написано более трёх лет назад
  • CacheProvider, какими стандартами и практиками пользоваться при написании на php?

    by25
    Andrey Kulikovsky @by25
    Можно включить только это библиотеку доктрины, только кэш. Вся доктрина не нужна.
    Вообще, я придерживаюсь идеи, что явное лучше не явного.

    В общем, я бы тогда в этом случает сделал фабрику, которая возвращала уже готовый экземпляр, а параметр, какой имено провайдер, через константу. Название констант сделал бы строковые:

    const DRIVER_REDIS = 'redis';

    В сервисах/контроллерах/итд внедрял бы кэш-провайдер как зависимость. Таким образом:

    class MyService{
    public function __construct(CacheProviderInterface $cache) {
    $this->cache = $cache;
    //...
    }
    }
    Написано более трёх лет назад
  • Какой тут паттерн нужен?

    by25
    Andrey Kulikovsky @by25
    да, все верно.
    Написано более трёх лет назад
  • Какой тут паттерн нужен?

    by25
    Andrey Kulikovsky @by25
    PS. забыл в конструктор проинжектить $storage
    Написано более трёх лет назад
  • Какой тут паттерн нужен?

    by25
    Andrey Kulikovsky @by25
    Репозиторий должен возвращать уже готовый объект/объекты.
    class MyRepository
    {
    
        private $storage;
    
    
        public function get($id) {
            $data = $this->storage->fetch($id);
            $object = MyObject::createFromArray($data);
            //... Ещё какой-то код, связи например
            return $object;
        }
    
    
        public function save(MyObject $object) {
    
            $data = [];
            // Тут свой код, создаем например массив $data, все что нужно для сохраниение в наш $storage
            $this->storage->save($data);
        }
        
        // Аналогично удаление, выборки, если нужно
    
    }
    Написано более трёх лет назад
  • Какой тут паттерн нужен?

    by25
    Andrey Kulikovsky @by25
    gog69: Изолировано, для этого есть замечательный паттерн Repository. Его обязанность извлекать объекты из хранилища, сохранять, удалять. Таким образом, наши domain-object изолирован и мы не завязаны на реализации хранилища.

    И ещё очень рекомендую прочитать книгу Эванса по DDD, там в часности очень хорошо разложен материал на эту тему.
    Написано более трёх лет назад
  • Какой тут паттерн нужен?

    by25
    Andrey Kulikovsky @by25
    gog69: По сути ни чем не отличается от фабрики. Но в данном случае соблюдается паттерн "Информационный эксперт".

    Извлечение из БД.
    Тут множество вариантов, начиная от ручками собирать объект или active record, заканчивая использованием полноценной ORM с DataMapper - Doctrine.
    Лично я предпочитаю - Doctrine, тогда наши сущности максимально абстрагированы от СУБД.
    Написано более трёх лет назад
  • Doctrine ORM Лучшие практики?

    by25
    Andrey Kulikovsky @by25
    diamond Да, с помощью value-objects (а для доктрины они же @Embeddable). Если необязательные свойства можно сделать сеттеры, но более осмысленные (сеттер на группу свойств, а не на каждое свойство).

    А вообще, при некоторых подходах (CQRS) и getters не всегда нужны :)
    Написано более трёх лет назад
  • Doctrine ORM Лучшие практики?

    by25
    Andrey Kulikovsky @by25
    Посмотрел и для старых версий, тоже все обернуто в транзакцию :)
    Написано более трёх лет назад
  • Doctrine ORM Лучшие практики?

    by25
    Andrey Kulikovsky @by25
    27cm Да, все верно.
    Это, если не путаю, было актуально для более старых версий Doctrine.
    Написано более трёх лет назад
  • Doctrine ORM Лучшие практики?

    by25
    Andrey Kulikovsky @by25
    Павел Чипак имелось в виду обернуть в транзакцию СУБД, типа:

    protected function flush()
        {
            $em = $this->get('doctrine.orm.entity_manager');
            $connection = $em->getConnection();
            try {
                $connection->beginTransaction();
                 $em->flush();
                $connection->commit();
            } catch (\Exception $exc) {
                $connection->rollBack();
                throw $exc;
            }
        }
    Написано более трёх лет назад
  • Хорошая ли практика привязываться к ивентам Doctrine?

    by25
    Andrey Kulikovsky @by25
    В итоге события пробрасываются в "@event_dispatcher", а дальше ловим их как обычные события, там все стандартно.
    Написано более трёх лет назад
  • Хорошая ли практика привязываться к ивентам Doctrine?

    by25
    Andrey Kulikovsky @by25
    Доктрина реализует Unit of work, поэтому мы можем удобно выгрузить все измененные сущности, получить из них события и выбросить событие например через симфонийский "@event_dispatcher". Я обычно внедряю EventListener слушающий "postFlush"

    services:
        infrastructure.doctrine_domain_events_handler:
            class: Infrastructure\BlaBlaNamespace\DomainEvent\DoctrineDomainEventsHandler
            arguments: ["@event_dispatcher"]
            tags:
                - { name: doctrine.event_listener, event: postFlush }


    Упрощенный код:

    class DoctrineDomainEventsHandler
    {
    
        /**
         * @var EventDispatcherInterface
         */
        private $dispatcher;
    
       //....
    
        public function postFlush(PostFlushEventArgs $args)
        {
            $em = $args->getEntityManager();
    
            $identityMap = $em->getUnitOfWork()->getIdentityMap();
    
            foreach ($identityMap as $entities) {
    
                foreach ($entities as $entity) {
                    if ($entity instanceof DomainEventsAwareInterface) {
    
                        $events = $entity->releaseEvents();
                        foreach ($events as $event) {
                            $this->dispatcher->dispatch($event->getName(), $event);
                        }
    
                    }
                }
            }
        }
    }
    Написано более трёх лет назад
  • Как использовать строки для выборок требующих "numeric"?

    by25
    Andrey Kulikovsky @by25 Автор вопроса
    Копал также и в эту сторону. Все вроде замечательно, но при первим insert у нас может быть значение "15", автомаппингом создастся поле типа int. А следущая запись может иметь значение - "от 15 до 20", а это уже строка.
    Можно ли как-то пропустить строковые значения, а числовые сконвертировать в number-подмножество и уже выборки осуществлять с ними?
    Написано более трёх лет назад
  • Подкрепить/улучшить знания базового уровня php?

    by25
    Andrey Kulikovsky @by25
    Вместо www.ozon.ru/context/detail/id/2457392 все-таки лучше www.ozon.ru/context/detail/id/31079082/.

    Первая книга больше как справочник, а книга Фримена отлично расскрывает суть этих подходов и читается на 2 порядка интереснее.
    ЗЫ. Читая Паттерны проектирования Фримена давно так не ржал, хотя темы расскрываются более чем серьезные.
    Написано более трёх лет назад
  • Как вставить в value значение из цикла?

    by25
    Andrey Kulikovsky @by25
    php.net/manual/ru
    Написано более трёх лет назад
  • 1
  • 2
  • Следующие →
Самые активные сегодня
  • puzaka
    • 10 ответов
    • 0 вопросов
  • mayton2019
    • 7 ответов
    • 1 вопрос
  • freeExec
    freeExec
    • 7 ответов
    • 0 вопросов
  • vabka
    Василий Банников
    • 7 ответов
    • 0 вопросов
  • firedragon
    Владимир Коротенко
    • 7 ответов
    • 0 вопросов
  • rPman
    • 6 ответов
    • 0 вопросов
  • © Habr
  • О сервисе
  • Правила
  • Обратная связь
  • Блог

Войдите на сайт

Чтобы задать вопрос и получить на него квалифицированный ответ.
Войти через центр авторизации