• Почему нельзя/можно писать бизнес-логику в sql?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Можно. Весь 20-й век почти так делали. База была главной. Эдакая себе царица. Ее любили. Холили.
    Приложения были двухзвенки. Оконная апликуха коннектилась к базе и все расчеты
    проводились в базе. Апликуха только показывала результаты в гридах и вводила формочки.
    Джобы тоже запускались в базе как процедуры на PL/SQL по скедулеру. Для пуска их клиент
    был тоже не нужен. Плановые задачи БД запускала самостоятельно. Это и было видение
    бизнес логики из 20-го века.

    В 21-м веке с развитием веба появился слой middle. И разработчики вынесли в него максимальную
    часть логики. Это произошло естественным путем. А базе досталась участь быть просто хранилищем
    таблиц. Потому что держать 2 копии логики или поддерживать было уже неудобно. В команде
    должен быть тогда разработчик и Java и PL/SQL одновременно. В современной парадигме
    разработки с ORM база стала просто чем-то вторичным. И на уровне ORM абстракций
    даже заменяемым на другие типы баз.

    Но не все так плохо.

    Фактически, логика современного приложения размазана по 3м слоям. Даже в браузере
    есть какая-то минимальная логика, например при аутентификации или при проверке
    валидности емейла. И какая-то логика агрегации (sum/group by) полюбому есть в базе.
    Потому что агрегировать в приложении все - глупо. Это лишний трафик.

    И нет такого архитектора который говорит "нельзя". Просто есть best-practices современной разработки,
    исходя из развитя железа, сетей и вообще рынка всего остального. Кто знает может в мобилах вернуться
    к двузвенкам. Смотря под каким углом смотреть на современные мобильные приложения? Who knows.
    Ответ написан
    2 комментария
  • Это единственный, уродливый способ вызвать метод с дополнительным аргументом в 'preg_replace_callback'?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Начиная с PHP 7.4 есть стрелочные функции
    preg_replace_callback(
        $regex,
        fn($matches) => $this->method_name($matches[0], $foo),
        $html.
    );
    Ответ написан
    3 комментария
  • Как пробросить домен внутрь WiFi сети?

    TrickyMilk
    @TrickyMilk Автор вопроса
    Нашел ответ. Пришлось все-таки юзать DNS сервер.

    Установил DnsMasq, настроил по инструкции, за исключением одного пункта - в файле /usr/local/etc/dnsmasq.conf прописал: address=/.dev/192.168.0.152.
    192.168.0.152 - IP адрес компьютера с DnsMasq в сети WiFi.

    После чего в настройках WiFi роутера поставил на первое место в списке DNS серверов IP адрес своего компьютера.

    Затем нужно дождаться обновления кеша DNS(или обновить вручную) на подключенных к этой же сети устройствах и сайт будет доступен на них.

    PS. Еще чуть не забыл - нужно удалить все записи связанные с доменом .dev из файла /etc/hosts. У меня не работало с ними.
    Ответ написан
    Комментировать
  • Позднее статическое связывание php: как это работает?

    MegaMufa
    @MegaMufa
    Смотрите. Есть такая простая иерархия классов:
    class A
    {
        public static $text = 'class A';
    
        public function selfTest()
        {
            echo self::$text;
        }
    
        public function staticTest()
        {
            echo static::$text;
        }
    }
    
    class B extends A
    {
        public static $text = 'class B';
    }


    Мы создаем экземпляк субкласа и вызываем методы, определенные в предке.
    $obj = new B();
    $obj->selfTest(); // выведет "class A"
    $obj->staticTest(); // выведет "class B"

    self всегда указывает на тот класс, в котором он написал. Здесь метод описан в классе A, и self указывает на класс A, хоть и вызывается из класса B.
    Значение static вычисляется при вызове. И static указывает на класс объекта в котором произошел вызов. В нашем случае он указывает на B, хотя сам код описан в классе A.

    Зачем это надо? Для того, что бы можно было переопределять статичные члены вашего класса в наследниках и вы могли обращаться к новым значениям из методов, описанных в предке.

    С обычными не статичными членами это и так работает, потому что они собираются, когда вы создаете объект класса. Что бы это работало для статичных методов, надо использовать static
    Ответ написан
    1 комментарий
  • Зачем нужны расширения PHP на PECL?

    akubintsev
    @akubintsev
    Опытный backend разработчик
    PEAR и PECL немного разные вещи. PEAR - это по сути предшественник Composer. Добавляет внешние библиотечки PHP, но на уровне системы, а не одного проекта.
    PECL - это компилируемые расширения языка. Можно поставить API для memcache через него, а можно и через пакет в Ubuntu/Debian.
    Лично я считаю, что лучше добавлять как пакет, если есть возможность, поскольку aptitude знает о зависимостях между пакетами и при обновлении проблем не должно быть. А если через PECL поставили, то готовьтесь к ручной переустановке.
    Ответ написан
    1 комментарий
  • Какой движок выбрать для интернет магазина?

    @ITLandgraf
    vk.com/digital_workroom
    При выборе нужно проанализировать какие предполагаются методы оплаты и доставки, каким будет дизайн (просто погуглить "шаблоны Prestashop", "шаблоны Opencart", "шаблоны Insales"). За шаблон, модули оплаты и доставки и какие-то другие опции придется платить.
    В Insales запланирована абонентская плата, в Prestashop и Opencart подобного нет, но периодически придется обращаться за техподдержкой к программисту (обучение, доработка, добавление функционала, решение проблем).
    Кстати, среди конструкторов сайтов Insales - поищите и сравните с другими.
    Ответ написан
    Комментировать
  • Как установить xdebug в веб-окружение Битрикс под Windows?

    @warhamster
    Тоже было надо, пришлось повозиться, у меня заработало так. Для виндового окружения битрикса (BitrixEnv version 2.1 Savanna edition) пишем в php.ini так:

    [xdebug]
    zend_extension="Apache2\ZendServer\lib\phpext\php_xdebug-2.1.2-5.3-vc9-nts.dll"
    ... (и далее параметры xdebug какие надо)


    Предварительно кладем в папку phpext соответствующую версию xdebug (php_xdebug-2.1.2-5.3-vc9-nts.dll) и, главное, в php.ini секцию [xdebug] надо ставить перед [zend], иначе апач будет крашиться.
    Ответ написан
    1 комментарий
  • Как сконвертировать объект CDBResult в CUser?

    GetFullName возвращает имя текущего пользователя, можете воспользоваться bxapi.ru/src/?module_id=main&name=CUser::FormatName
    Ответ написан
    Комментировать
  • Как организовать процесс разработки bitrix-проекта на Windows-машинах?

    @MattLe
    По повоту ядра и git'а, битрикс ввел такуб волшебную папку в корень "local" которая предназначена для таких вот целей. Почитайте
    Подмымите vps накотите туда web окружение битрикса, он за вас все развернет и настроит делается в два клика.
    А вот отдельная база для разрабов это очень плохо, потом вы не сможете нормально перенести. Мой совет, подымаете впс и на нем разрабатываете все вместе, разделяйте только задачи что бы не пересикались, ну если что любая ide для разработки уже позволяет проверять файлы перед деплоем и если что информирует вас об изменений. Сосбтвено мы в студии так и рабоаем, есть конечно нюансы но в целом пока все хорошо.
    Ответ написан
    3 комментария