Задать вопрос
  • Как в sublime конвертировать индентацию 2 таба в 4?

    e_s_l
    @e_s_l
    Full-stack web developer
    Сделайте сперва конвертацию в табы, потом поставьте ширину таба 4. Я еще затем конвертирую табы в пробелы и получаю 4 пробела. Всегда так делаю, всё работает.
    Ответ написан
    Комментировать
  • Как лучше построить модуль Транзакции в symfony?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    0) Никаких TransactionBundle. Вы эту логику не сможете реюзать, а значит нет смысла делать бандл. Почитайте symfony best practice. У вас должен быть один AppBundle и все, больше ничего. Вы можете пытаться выносить какие-то части инфраструктуры, которая не привязана к бизнес логике в отдельные бандлы для последующего реюза, но бизнес логику приложения реюзать не выйдет.

    1) почитайте про event sourcing. Этот способ хранения данных идеален для платежных транзакций, собственно в банках и т.д. этот подход и используют десятилетиями, да даже та же база данных хранит лог транзакций.

    2) уберите flush их сервиса и вынесите его в контроллер. flush коммитит транзакцию в базу, и нам надо это делать когда мы завершили работу с оными а не "где-то посередине".

    3) оборачивать это добро в еще одну транзакцию глупо, потому что... доктрина и так сделает транзакцию. В любом случае по хорошему это надо делать в декораторе.

    4) call_user_func_array в вашем случае - пример плохого решения.

    5) по умолчанию persist использовать нужно только для тех сущностей, которые мы только что создали (в нашем случае - транзакция), либо тех которые мы явно вынули из unit of work (а у нас нет вызова $em->detach).

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

    7) сервисы менеджеры - отстой. Называйте сервисы нормально.

    8) вместо кучи сервисов можно ввести разные объекты транзакций. Например FundTransaction, IncomTransaction и т.д. У вас же в сервисах почти весь код дублируется. А так можно было бы всю логику с этими операциями сложить прямо в сущности.

    9) НИКАКИХ DIE! даже для дебага.

    public function transactionAction(Request $request)
    {
        $data = $request->request;
        $transactionDTO = new TransactionDTO(
             // вообще я бы тут просто ID пользователя возвращал... но я упорот по изоляции приложения от UI
             $this->get('security.token_storage')->getToken()->getUser(), 
             $data->get('sender_account_type'),
             $data->get('recipient_account_type'),
             $data->get('amount')
        );
        // с исключениями разберется фронт контроллер
        $this->get('app.transaction_processor')->process($transactionDTO);
        // вот теперь сохраняем изменения
        $this->get('doctrine.orm.entity_manager')->flush();
    
        return new Response(null, 201); // создали новую запись в журнале транзакций
    }


    class TransactionProcessor
    {
          private $transactionsRepository;      
    
          public function __construct(TransactionRepository $repository)
          {
               $this->transactionsRepository = $repository;
          }
    
          public function process(TransactionDTO $dto)
          {
                // create это статический метод фабрика у абстрактного класса Transaction
                // читать шаблон проектирования "абстрактная фабрика".
                $transaction = Transaction::create($dto->getSender(), $dto->getRecipient(), $dto->getAmount());
                
                $this->transactionsRepository->add($transaction);
          }
    }


    дальше мне по логике не понятно, почему у вас одна транзакция на двух человек, полюбому у sender-а будет один тип транзакции а у ресивера другой. Можно запомнить кому мы чего передавали и только.
    Ответ написан
    7 комментариев
  • Как можно изменить тему Yii 2 basic на Admin LTE?

    @bubuntu Автор вопроса
    Спасибо за зрение
    Ответ написан
    Комментировать
  • Как задать сценарий при обновлении модели в yii2?

    nepster-web
    @nepster-web
    $model = MyModel::findOne($pk);
    $model->scenario = 'register';


    Эквивалент:
    $model = MyModel::findOne($pk);
    $model->setScenario('register')
    Ответ написан
    Комментировать
  • Почему composer не может решить зависимости?

    @SilverSlice
    Коротко: используйте только стабильные релизы при указании версий в зависимостях в своих пакетах.

    Подробно.
    В composer есть флаг minimum-stability, который используется для отбора пакетов на основе стабильности при установке. По умолчанию он равен stable, т.е. устанавливаются только стабильные пакеты. Вы можете изменить это поведение, добавив параметр "minimum-stability" в composer.json. Обратите внимание, что этот параметр применяется только к корневому пакету - вашему основному composer.json файлу.

    Что происходит, когда вы вводите команду composer require nullref/yii2-cms:
    • Создается composer.json файл, в котором не определен minimum-stability, поэтому он рассматривается как stable.
    • В корневом пакете у вас определен в зависимостях только один пакет - nullref/yii2-cms, который имеет стабильный релиз - он и начинает устанавливаться.
    • Пакет nullref/yii2-cms имеет в зависимостях пакет nullref/yii2-admin с версией dev-master. Это нестабильный релиз и он не может быть установлен, т.к. в корневом пакете minimum-stability считается равным stable.

    Что можно сделать:
    • Установить minimum-stability в dev в корневом composer.json файле. В этом случае также следует добавить "prefer-stable": true, чтобы по возможности ставились стабильные пакеты.
    • Использовать stability flags, явно указав флаг в корневом пакете: "nullref/yii2-admin": "@dev".
    • Убрать dev-master отовсюду из зависимостей, выпускать релизы и указывать версии любым из доступных способов.

    И в заключение привожу ссылку на статью с подробным объяснением minimum-stability.
    Ответ написан
    1 комментарий
  • Как решать конфликты в git?

    понять как устроен git на уровне консоли а не gui
    Ответ написан
    3 комментария
  • Существуют ли табы с hover?

    @chirskiy_mixail
    Очень давно занимаюсь версткой, имею огромный опыт
    В чем проблема заменить click, на hover или mouseover and mouseleave, если вы сами делаете, то не будет проблем, если используете какой то плагин, то там должны быть настройки, указываете вместо click, hover. И киньте уж пример в студию если хотите, чтобы вам помогли
    Ответ написан
    Комментировать
  • Хорошие ребята используют apt-get или aptitude?

    Пакетный менеджер один - dpkg.
    apt, apt-get, aptitude - лишь фронтенды для dpkg.
    Ответ написан
    4 комментария
  • Как правильно изменять ресурсы в yii2?

    iiifx
    @iiifx
    PHP, OOP, SOLID, Yii2, Composer, PHPStorm
    Можно пойти другим путем и не копировать ассеты, а ставть на них ссылки
    'components' => [
    
            // ...
    
            'assetManager' => [
                'linkAssets' => true,
                'appendTimestamp' => true,
            ],

    В этом случае подключаться будут всегда актуальные версии ассетов.
    Ответ написан
    Комментировать
  • UML и паттерны проектирования - это одно и то же?

    saboteur_kiev
    @saboteur_kiev Куратор тега Программирование
    software engineer
    Вы путаете теплое с мягким.

    UML - это язык для рисования схем, которым пользуются для того, чтобы нарисовать классы и их взаимосвязь. С паттернами программирования никак не связано.

    Паттерны программирования - это архитектурное решение популярных задач, чтобы не изобретать велосипед, которое не имеет отношение к языку программирования. Просто у вас есть некая задача, вы придумаваете алгоритм, который ее решает. Паттерны позволяют вам не выдумывать алгоритм, а глянуть - вдруг подобные задачи уже до вас решали, и есть подходящие паттерны. После чего на нужном языке вы этот паттерн реализуете. А если коллектив большой, то общаясь с коллегами вы не будете им полтора часа рассказывать идею, а просто назовете имя паттерна и все кто с ними знаком вас поймут с полуслова.
    Ответ написан
    4 комментария
  • UML и паттерны проектирования - это одно и то же?

    @IceJOKER
    Web/Android developer
    UML - это графическое изображение классов(объектов.....)
    Паттерны проектирования - это решения для часто возникающих проблем

    Гуглить не судьба?
    Ответ написан
    3 комментария
  • Почему нечётное количество лопастей в куллере?

    Потому что если бы было чётное количество то это был бы уже самолёт а не куллер!
    13-2.jpg
    Ответ написан
    3 комментария
  • Бекенд для приложения на реакте. Какой он у вас?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    С каким бекендом Вы предпочитаете связывать свое приложение?


    Обычно REST/HTTP API/RPC прячут нюансы реализации бэкэнда. Так что без разницы, лишь бы апишка была удобная.

    Каков Ваш стек в этом плане?

    php, symfony2, postgresql. В любом случае разработчика SPA это волновать должно в последнюю очередь.

    Так же интересует выбор баз (MySql, MongoDB....)

    никогда не используйте mongodb как основное хранилище. Любая реляционная база на простых задачах (а на простых задачах nosql не нужен) будет проще и эффективнее. Говорю это основываясь на своем горьком опыте. Храните в mongodb агрегации денормализованных данных для ускорения выборок из реляционок. то есть в mongodb должны быть либо простые независимые данные (логи например) либо read-only данные.
    Ответ написан
    7 комментариев
  • В каком возрасте вы прочитали GOF паттерны?

    @jaxel
    Лет в 20 первый раз прочитал... и ничего не понял:) GOF очень тяжело воспринимается, особенно начинающими. Более-менее хорошо понимать паттерны я стал после прочтения Фримен Эр., Фримен Эл., Сьерра К., Бейтс Б. "Паттерны проектирования". Там всё простым языком написано и разжёвано.
    Ответ написан
    Комментировать
  • Как называются вертикальные линии с левой стороны которые показывают блок кода?

    Vestail
    @Vestail
    Software Engineer
    На английском вроде Indent Guides. По крайне мере для VS есть плагин, который так называется.
    Ответ написан
    Комментировать
  • Правильно ли я понял работу фреймворков?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Фреймворки это набор готовых решений для стандартных задач. Воспринимайте их как кучу отдельных библиотек. Скажем нет смысла раз от раза писать снова и снова маршрутизацию запросов и т.д.

    В контроллере использую готовые функции например работа с БД.

    Основная задача контроллера - быть посредником между представлением данных (HTTP например, или web интерфейс, или CLI) и логикой их обработки. То есть работать с базой данных в контроллере вы можете, но не рекомендуется (только если вы знаете к чему может это привести и чем плохи толстые контроллеры).

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

    Но если я хочу написать например обрезание фото квадратом, то я должен реализовывать свой велик?

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

    Тоесть половина функционала это функции фреймворка, половина это мои велики...

    Не велики, а бизнес логика. Фреймворк предоставляет вам каркас, решение типичных задач. В случае простого CRUD соотношение вашего кода к коду фреймворка библиотек может быть 1/10. В случае сложной бизнес логики и специфичной инфраструктуры - 10/1.
    Ответ написан
    Комментировать
  • Где проектировать Restful API?

    RAML (самый молодой, но рекомендую)
    Swagger
    Apiary

    Это фреймоворки для проектировния API. По сути предоставляют свой DSL для описания и ДОКУМЕНТИРОВАНИЯ (!) API. К большинству из них идут инструменты по генерации читабельных доков и всякие mock-инструменты и генераторы клиентов-загрушек и сервисов-заглушек (для тестирования сервисов и клиентов соответственно). Вот например тулзы для Сваггера: swagger.io/swagger-codegen :
    The Swagger codegen project allows generation of both client libraries and server stubs from a Swagger definition.


    vREST - более комплексный продукт, включающий автоматизацию тестирования, есть платные возможности.
    Mashape - большой продукт для предоставления API, используется многими крупными компаниями (напр., Близзы его юзают).

    P.S. Есть еще различные модели гипермедийных API (JSON-LD, HAL, Siren, и т.д.), но это пока не очень популярные вещи, поэтому если не готовы быть одним из первопроходцев, лучше попробуйте их потом, когда наберут популярность (если наберут).
    Ответ написан
    2 комментария
  • Что делает программиста программистом?

    @MrCheater
    Full-Stack JS. В прошлом программист-олимпиадник
    Программист - это тот, кто может автоматизировать решение прикладной задачи (по айтишной тематике) любым доступным способом
    Ответ написан
    5 комментариев
  • Кто нибудь получил доступ к новому api кинопоиска?

    Ответили, обещают в течении месяца уладить тех. вопросы и запустить API, предоставить доступ к документации.
    Вот какие данные можно будет получить:

    У нас есть 7 готовых "наборов" данных, которые мы готовы предоставлять. Так же вы можете собрать собственный набор из любых 4 типов данных.
    А = основные факты + рейтинг
    B = основные факты + рейтинг + рецензии
    C = основные факты + рейтинг + расписание
    D = основные факты + рейтинг + синопсис
    E = рейтинг
    F = расширенные факты + рейтинг
    J = собственный набор из любых N типов данных к фильму
    где
    основные факты = название (ru) | оригинальное название | год | страна (все) | режиссер | жанр (все) | актеры | время (хрономтераж) | возраст (ограничения в ru)
    расширенные факты = основные факты + слоган | сценарист | продюсер | оператор | композитор | монтаж | премьера (мир) | премьера (по гео пользователя) | актеры (ТОП-N?) | синопсис | постер
    Ответ написан
    3 комментария