Правильное использование модели с разбивкой на типы

fixxxer

К.О.
Партнер клуба
@StalkerClasses еще раз повторяю. Напиши PHP-код, в виде классов. Не думая о базе данных. Покажи, что получилось.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
я писал не про инкапсуляцию и не про CQRS, этого нет, я про ActiveRecord для работы с базой

нет проблем использовать для чтения и записи разные классы, разделить валидацию данных и хранение вполне удобно

основная проблема yii - никто ничего лет 5 не делал
вместо DI на рефлексии там звездный Yii::$app, вместо автокомплита в лямбдах - соглашения на массивах, логгер умеет только в файлы
проект замерз в 10-летней архитектуре под PHP 5.4
 
Последнее редактирование:

fixxxer

К.О.
Партнер клуба
Активрекорд-то понятно что можно не использовать, но для персистенции ничего другого не предлагается.

Ну то есть надо втащить датамаппер, втащить нормальный DiC, PSR3-логгер... А что останется-то? Не проще ли взять минимальный sf4? (Вопрос риторический.)
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
"минимальный" sf4 мне не нравится точно так же - самосвал с горой бесполезных сервисов, при каждом запросе несколько десятков инициализируется, и работает со скоростью ... самосвала.
У меня RESTful api и докер. Мне не нужны аннотации, генератор форм, валидатор форм, .env-файлы, cache warmer, CSRF, translation, шаблоны, прокси, сессии. За что, Герасим? 🤦‍♂️
Руками писать быстрее, чем дебажить недокументированные фичи SF.
DI удобный, но датамаппер надо втаскивать всегда, а если берем микроядро, логгер надо писать свой, а иначе - самосвал.
 

fixxxer

К.О.
Партнер клуба
С микросервисами с рестфул апи и докером вообще непонятно нафига PHP, если честно. :)
У меня для всего такого nodejs + typescript + NestJS.
Переход с модели prefork с инициализацией всего добра на каждый запрос на event-based демон даст куда больше профита, чем отключение сервиса, который либо легко отрубается, либо, если его не вызывать, ничего и не делает. :)

Да и вообще на вопрос "нафига PHP" для новых проектов у меня нет нормального ответа, если честно. С появлением более-менее нормальной ORM для typescript последний вопрос отпал.
 
Последнее редактирование:

Yoskaldyr

"Спамер"
Партнер клуба
С нодой самая большая проблема работа когда в команде есть джуниоры, или просто альтернативноодаренные. По любому кто-то ивентлуп залочит на долго....
 

fixxxer

К.О.
Партнер клуба
Если в команде есть джуниоры и альтернативно одаренные, каждая строчка их кода должна проходить тщательный code review. Это хоть с нодой хоть с чем.

Да и залочить довольно сложно уже, это надо проигнорировать всю инфраструктуру и написать что-то такое ручками.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
Все-таки не стоит смешивать понятия, restful - не микросервисы, бывает просто большой middleware.
По отзывам NestJS сырой просто. Можно попробовать, конечно.
И на php есть AMP с неблокирующим режимом, в него можно встроить sf4.
 

fixxxer

К.О.
Партнер клуба
По отзывам NestJS сырой просто.
За более чем год активного использования ни разу не наткнулся на какие-либо серьезные проблемы.
Временами надо читать исходники, чтобы понять внутреннюю логику, те, кто надеется обойтись копипастой из документации и со StackOverflow, будут недовольны - это да.

И на php есть AMP с неблокирующим режимом, в него можно встроить sf4.
Да, и оказаться в ситуации, когда 99% пакетов с composer packagist надо форкать и переписывать на асинхронщину.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
Пытаюсь вспомнить, когда мне были нужны пакеты из composer, кроме фреймворка.
Смотрю список первых несколько сотен самых популярных пакетов https://packagist.org/explore/popular
Блокирующие там - только база и логгер. Понятно, что неблокирующий фреймворк это делает из коробки.
Если не писать монолит - в middleware никакие сторонние пакеты не нужны. Если нужна обработка, например, почта - это демон, image magic - отдельный сервис.
Не вижу применимости тезиса про переписывание к реальной жизни. Я не пишу монолит.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
TS мне нравится, но я не разобрался как дебажить в построчном режиме. Работает-то JS. Это как-то решается через карты, но сходу я не разобрался как подключать IDE.
В целом есть ощущение, что node - это свалка. Self-documented code - это значит, сиди разбирайся, что там в голове у авторов. В чем у тебя кайф - не понимаю. Надо попробовать.
 
Последнее редактирование:

fixxxer

К.О.
Партнер клуба
В целом node свалка, да, пакеты надо тщательно отбирать по качеству (все это напоминает перловый cpan). NestJS нормальный.

Дебажить NestJS проще всего так:

nodemon.json
Код:
{
  "watch": ["src"],
  "ext": "ts",
  "ignore": ["src/**/*.spec.ts"],
  "exec": "node --inspect=0.0.0.0:5858 -r ts-node/register index.js"
}
запускаешь npm run start:watch и аттачишься Стормом на 5858 (ну или какой там у тебя порт).
Из докера тоже отлично все работает - стандартным node контейнером с entypoint-ом npm run start:watch. Единственный нюанс: на маке надо указать
Код:
        environment:
            TS_NODE_TRANSPILE_ONLY: "true"
чтобы поменьше тормозило из-за i/o. На линуксе и без этого нормально.
 

Крот

Новичок
Тоже сейчас копаю NestJS - очень нравится. Декораторы радуют - получается весьма чистенький код. К PHP возвращаться желания минимум.
 

StalkerClasses

Новичок
Вот что я нашел:

Но хотелось бы пример простой.
 

StalkerClasses

Новичок

grigori

( ͡° ͜ʖ ͡°)
Команда форума
с какой целью ты это нашел? пока в php нет generic-ов, это фигня, и как в yii это сделано - реально неудобно, я сейчас несколько десятков классов переписываю из-за такой вот связанности через наследование.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
Да и вообще на вопрос "нафига PHP" для новых проектов у меня нет нормального ответа, если честно. С появлением более-менее нормальной ORM для typescript последний вопрос отпал.
Наверное, поэтому за последние два года JavaScript на серверной части веб-сайтов стали использовать в два раза больше :)
 
Сверху