• Проект со сложной логикой на Symfony – как проектировать? Примеры?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Как хранить бизнес-логику чтобы модели не превратились в монстров из десятков тысяч строк?

    Тут не совсем модели. Entity - это просто объект данных, умеет хранить их в себе и бросать исключения, если не правильные данные вставляете, все. Repository - умеет работать со своим Entity И БД.

    БЛ находится в классах сервисах.

    Читал про Command Bus где, если правильно понял, на каждое действие в системе – свой класс?

    Вообще под каждое дествие - не обязательно, тут нужно руководствоваться здравым смыслом.

    Как их организуете (их тогда будут сотни)?

    Иерархически. Путь к классу должен быть "понимаем".

    Есть ли смысл выносить каждую доменную модель в модуль/микросервис, хранить всю связанную логику где-то там внутри, а с остальными общаться по внешнему API?

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

    За ответы в клиентскую часть – отдельный сервис-фронтенд?

    Если в "сервис" вы вкладываете понятие простого класса, умеющего форматировать ответы вашего проекта - мысль здравая.
    Если ответы будут асинхронными (от сервера к другому) - имеет смысл выностить в отдельный клиентский класс.

    Каков оверхед?

    Ничтожный.

    Используют ли такое на практике?

    Да

    Какие подводные камни?

    Следствием серьезной декомпозиции в любом случае будут лишние сущности, чем раньше от них будете избавляться - тем лучше.

    Как не превратить кидание/получение событий типа PostBeforeEdit/PostBeforeEditHandler в "callback hell"?

    Если есть возможность отказаться от событийной модели - часто лучше отказаться.
    Листнеры доктрины конечно штука мощная, но работает не всегда очевидно.

    Функционал "PostBeforeEdit/PostBeforeEditHandler" часто дешевле и проще вынести в сервис, но опять же руководствуйтесь здравым смыслом.

    ACL Где храните указанную логику?

    Если ACL будет не тривиальный - готовьте себя к тому, что он будет размазан по уровню контроллеров.

    Какие структуры для описанного выше – best practice?

    Если есть возможность привести к одноуровневому виду - сделайте. Если с точки зрения бизнеса может потребоваться иерархическая (не фиксированной вложенности) ACL - до последнего убеждайте, что это плохая идея, не повторяйте чужих ошибок.

    В моём понимании это выглядит как куча трёхмерных кубов доступа "crud – group – entity – field", как это сделать более плоским пока только одна идея – делать кучу таблиц many-to-many.

    Гибкая настройка вплоть до каждого поля 90% что не нужна. Если можно свести к понятию скопов прав - сделайте это.
    Структуру можно предлагать только зная ваш проект.

    Версионирование. Как вы версионируете подобные проекты?

    Semver.

    А если нужна "N-1" рабочая версия на продакшене?

    Значит на прод попадает ваша версия с тегом "N-1"))

    Есть ли смысл разделять версии в рамках единой кодовой базы проекта и как (неймспейсы, конфиг, модуль, что-то ещё)?

    Храните яйца в отдельных корзинках. Если модуль развивается полностью отдельно и может быть вынесен как зависимость проекта в vendor - делайте.

    И, самое главное – как всё это совместить?

    • РУКОВОДСТВУЙТЕСЬ ЗДРАВЫМ СМЫСЛОМ
    • Принимаете жесткие соглашения по правилам написания кода, например такие
    • Постарайтесь убедить бизнес в том, что без покрытия кода автотестами будет дороже, нестабильней и дольше. + Пишите тесты. Если объем тестов в 4 раза больше кода, который они тестируют - это норм. У меня бывали случаи, когда для критичного функционала тестов было в ~16 раз больше, чем кода.
    • Жесткие, обязательные кодревью.
    • Если задача крупная - декомпозируйте ее.
    • Технический долг - возвращайте обязательно И как можно скорее.
    • Перед тем как писать код для работы с внешним сервисом - имеет смысл написать его эмулятор.
    • Спешите только в случае серьезных проблем на проде)). Фичи "на вчера" отличаются от фич "на потом" только приоритетом выполнения, более ничем.
    Ответ написан
    6 комментариев
  • Возможно ли сверстать такую кнопку на html+css?

    @GreatRash
    Нет. Кроссбраузерно, только SVG. Предлагаю подход graceful degradation: то есть для современных браузеров SVG, а для старых - картинка.
    Ответ написан
    1 комментарий
  • Как пишутся системы оплаты для сайта?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    Как осуществляется написание платежной системы касательно visa и mastercard или для конкретного банка? что делается в данном случае? (Допустим требуется работа со сбербанком и альфабанком).

    Из личного опыта:
    a. Приезжаете в офис банка у которого есть услуга "интернет эквайринг", показываете своё юрлицо, уставные документы, бенефициаров, обороты от 50 млн в месяц.
    * некоторые работают и с меньшими оборотами, но % будет крайне не выгодным.
    ** без запущенного и работающего проекта идти в банк бессмысленно.
    b. Ждете 2-6 недель пока СБ банка проверит все.
    c. Ждете 2-4 недели пока банк подпишет договор
    d. Получаете реквизиты и документацию API конкретного банка.
    e. Реализуете
    f. Ждете 1-2 недели пока банк проверит что у Вас все согласно их протоколу.
    g. Получаете боевые реквизиты.

    Учтите что:
    1. Если Ваши объемы меньше чем 50млн+ в месяц - с вероятностью 99% Вам будет СИЛЬНО выгоднее работать через посредника. Посмотрите на uniteller.ru , payture.com/ru , payler.com - если Вы будете достаточно убедительны на переговорах, вполне реально сторговать их до 2-2.5% даже на маленьких оборотах (1млн-5млн)

    2. Прямые API банков мягко говоря не современны. Как правило там не будет ни удобного личного кабинета, ни вменяемой службы поддержки - ничего. Зато будут проверки, требования бумажной отчетности и прочие милые сердцу советского бюрократа вещи.

    3. Риски при работе через посредника - по факту минимальны. Все приведенные выше делают выплаты ежесуточно, т.е даже если посредник накроется - Вы максимум рискуете дневным оборотом.

    С учетом данных пунктов, по моему мнению прямой договор с банком имеет смысл если у Вас настолько большие обороты - что разница в десятые доли процента окупает весь этот геморрой.
    По факту есть море проектов с большими оборотами (mamba, badoo, etc) кто продолжает работать через агрегатор, минимизируя расходы на юристов, бухгалтеров, техническую поддержку работы шлюза итд итп.
    Ответ написан
    1 комментарий
  • Получить дату ближайшей субботы на php?

    @pibiv
    $date =  strtotime("next Saturday");
    echo $date;
    Ответ написан
    Комментировать
  • Как перейти на ООП в javascript?

    Taraflex
    @Taraflex
    Ищу работу. Контакты в профиле.
    Обычные задачи - слайдер, табы, отправка форм AJAX и т.п

    Вам не нужен ООП.
    Ответ написан
    2 комментария
  • Какую готовую библиотеку использовать для работы с ajax?

    AloneCoder
    @AloneCoder
    [object Object]
    Vanilla.js
    Ответ написан
    Комментировать
  • Что случилось с базой и как исправить?

    denissov
    @denissov Автор вопроса
    Вопрос решен. Зашёл в phpmyadmin в таблицу information выполнил запрос show processis; Был в очереди непонятный запрос, который висел и новые не выполнялись, завершил его тут же и всё заработало
    Ответ написан
    Комментировать
  • Как сделать такой бэкграунд для текста?

    Petroveg
    @Petroveg
    Миром правят маленькие с#@&ки
    Аха. Вот эти ребята. Я делаю уличную магию. Особую. Хотите взглянуть?
    Ответ написан
    Комментировать
  • Как организовать чередь с функцией вставки элементов на PHP?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    php.net/manual/en/class.splqueue.php и ненужно велосипедов. Что до "вклинивать" элементы, может вам очередь с приоритетами нужна? Так и оно есть:
    php.net/manual/en/class.splpriorityqueue.php
    Ответ написан
    Комментировать
  • Как правильно организовать роутинг в Yii?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    '<username:\w+>' => 'profile/view',
    '<username:\w+>/profile' => 'profile/profile',
    '<username:\w+>/collection' => 'profile/collection',


    Если же вам надо проверять есть ли такой пользователь в базе на этапе разбора правил - можно реализовать свое правило.
    Ответ написан
  • Как написать кликер на PHP?

    Dimitriys
    @Dimitriys
    1) curl - получаем содержимое страничек, парсим, ходим по ссылкам.
    2) selenium - управление реальным брузером из PHP
    Ответ написан
    Комментировать
  • HTML5 Canvas: почему при setTransform изображение оставляет след?

    Странно, протестировал, и все плавно без смазывания работает
    codepen.io/anon/pen/ABbhq
    Ответ написан
    Комментировать
  • Как найти однокоренные слова?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    sourceforge.net/projects/phpmorphy - вам нужен морфологический анализ текста.
    Ответ написан
    Комментировать
  • Как лучше создать простой сайт-каталог?

    GM2mars
    @GM2mars
    Самый простой способ:
    Правой кнопкой мыши -> создать каталог (папку). Правой кнопкой мыши на каталог -> свойства -> безопасность. Там настраиваете доступ.
    Ответ написан
    3 комментария
  • Где можно найти хорошие материалы по AngularJS?

    metamorph
    @metamorph
    Ответ написан
    Комментировать
  • Какой взять JS-фреймворк для одностраничного веб-приложения?

    TekVanDo
    @TekVanDo
    Javascript Developer
    Думаю тут все стандартно, выбирай между AngularJs backboneJs emberJs, что болльше понравиться. Лично я бы выбрал Angular.
    Ответ написан
    1 комментарий
  • "Адаптивная" вёрстка + ссылка "перейти к полной версии"

    Я бы сделал так (средствами javascript, jquery): без перезагрузки страницы в хэде убираем тэги, которые "заставляют" страницу быть адаптивной (и соответствующие js, если используются):

    <meta name="HandheldFriendly" content="True" />
    <meta name="MobileOptimized" content="320" />
    <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1" />


    Таким же образом, для надежности, можно убрать и css с установками адаптивности (предварительно выделив его в отдельный файл).

    Все то же можно сделать и с перезагрузкой страницы - средствами php, или на чем там сайт.
    Ответ написан
    Комментировать