Pull to refresh

Comments 27

Если это вся суть проекта, то да, но если на этом не останавливаться, то лучше использовать хорошо задокументированную, протестированную, абстракцию с которой большинство разработчиков знакомы (привет React), чем писать велосипед шаблонизатор без тестов, без документации, с которым придётся разбираться новым разработчикам

Если это вся суть проекта, то да, но если на этом не останавливаться, то

.. получится..

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

А если вы к нему добавите ещё и..

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

..то погоды это не сделает. Более того, это ухудшит архитектуру проекта.

Вот, не свойство компонента конвертировать между массивом и строкой для рендинга

Что это значит? Несколько раз перечитал, но так и не понял

[на интуиции] Массив каким-либо образом нужно конвертнуть в строку для отрисовки, так? И вот именно это знание не нужно держать в компоненте. Интереснее, как мне кажется, это знание отдать движку (jsx).

Речь про SRP (single responsibility principle)

Да и DI сделать сложнее

А вообще пишите функциональный код, если ваш проект пока не определился со стеком технологий, так хотя бы модули на ФП вы сможете потом использовать, а если они еще и юнит-тестами обложены, цены вам нет

Но если бы вы стали городить тут абстракции а-ля адаптеры и так далее — тогда вы делаете велосипед.

https://anywhere.epam.com/en/blog/javascript-functional-programming-vs-oop

Я даже с точки зрения русского языка не смог распарсить предложение, так что можно, конечно, гадать, но мне так до сих пор непонятно. И непонятно, почему автор в тексте не поправит это

Есть целое море причин почему нужно использовать библиотеки и фреймворки на коммерческих проектах: скорость найма кадров, порог входа в проект, обучение и обмен опытом, скорость разработки, качество решений, наличие документации, наличие огромного количество собранных граблей решенных вопросов на SO, и прочее, и прочее.

Как сказали выше, если проект из серии написать и больше не трогать, то можно сделать как угодно, да.

Если уж отходить от реакта, то можно отойти и от логики "перерендер на каждое изменение", выкинуть все render/subscribe/unsubscribe и добавлять в html новую строчку прямо в обработчике кнопки. Это и куда производительнее будет.

Кажется интерфейс у компонента будет немного другой, но тз покроет :)

Этот подход очень плохо масштабируется, так как требует, чтобы каждая кнопка знала про рендеринг всего приложения.

Согласен, так что если приложение большое, то лучше сразу Реакт и взять.

Если приложение большое, то Реакт тем более лучше не брать.

Первый вопрос, который проект себе должен задать — зачем это мне?

React — реагировать, если вы делаете простой layout без масштабирования и конечных автоматов — тогда вам и js наверное не нужен и при правильной подаче используйте конструкторы типа WordPress, бизнес, что не понимает зачем ему конкретный стек ориентируется на выживание, а не качество кода.

Если бизнес выжил — он уже начнёт пилить 2.0, а тут фактически и не масштабируемое решение, чтобы проверить гипотезу на рынке и не стабильный стек для частых релизов

А что мешает сразу сделать масштабируемое решение, чтобы потом не переписывать всё по нескольку раз?

Тогда как вы объясните, что одним эта "реальность" мешает, а другим - нет?

не свойство компонента конвертировать между массивом и строкой для рендинга

Нет принципиального отличия от "конвертировать объект ({title, body}) в строку для рендеринга". И то, и другое - сериализация данных в строку.

вызов unsubscribe (ресурсный метод) то тут, то там

По-моему, тут ансабскрайб вообще не нужен нигде. Его GC соберет - на него нигде не осталось ссылок. В древние века в каком-то браузере это бы привело к утечкам памяти - но не в 2023.

Ссылка на самих себя в колбеке

Не вижу ничего страшного.

Создание компонента на каждый колбэк

Необязательно же так делать. Можно сделать comp.setData(emails) . И компонент просто перерисуется

Основные проблемы с этим кодом - отсутствие экранирования (привет, XSS) и полная перерисовка страницы на каждый чих. Первую проблему можно решить легким шаблонизатором. Вторую - только точечной подпиской на изменения и скурпулезной работой с DOM. И вот тут-то мы получим, в том числе, и проблему с композицией. А если мы перерисовываем все всегда, то компоновать копмоненты - тривиально.

Про xss - да, хороший поинт

Тут любой ревьювер должен понять что это программирование ради программирования, кейс с xss — это еще цветочки

Мы пишем код не ради написания кода, а ревьюверы не чтобы тешить свое чсв

Если вы пилите качественный Энтерпрайз, то ревьювер обязан reject-ить такой PR/MR на этапе его создания

Если вы пишите гипотезу абы-как тогда откуда вас тут появилась культура ревью? Форс-пушьте в мастер. Если это какие-то инженерные вилы (не люблю реакт = не понимаю его), тогда бизнес просто тратит деньги на то, чтобы разработчики делали вид, что они не самозванцы, раз так глубоко шарят в надежде написать свой велосипед

Отсюда же вытекает следующее:

Энтерпрайз с большим прошлым и будущим — пишем норм на стабильном решении

Тестим гипотезу — берите no code или ucoz

Нет фронтендеров? Привет ASP.NET MVC

А если они есть, то мне кажется, что зря вы их наняли если их больше 1 человека, потому что они пишут велосипед, пока ваш бизнес пытается жить

Культура написания качественного кода != культура написания своих велосипедов

В разработке нужно отталкиваться от принципов, никто не любит приходить на проекте и разгребать легаси за тем, кого поторопили и кто не разобрался и не смог сказать бизнесу «нет», единственная книга Мартина для рекомендации «идеальный программист»

Вообще, идея хорошая — показать на практическом примере, какие неочевидные проблемы решает популярный фреймворк (помимо общих рассуждений про удобство и упрощение найма).


Примерно года 3-4 назад был пик холивара вокруг jQuery. Помню, тогда многие писали, что его давно пора закапывать, потому что ванила умеет всё то же самое. Что, конечно, не совсем правда — приводимые в интернетах "эквиваленты" часто были не совсем эквивалентами, упускали существенные детали и тд.


Вот и здесь было бы интересно почитать. Типа есть такая типичная задача, в лоб она решается вот таким подходом, но в этом коде спрятаны с такие-то проблемы. А авторы фреймворка их предусмотрели так-то и так-то.
Но реализация (статьи) неудачная: ничего толком не понятно — ни постановка задачи, ни логика решения, ни объяснения проблем.

Вы надоели уже экспериментировать. Наэксперементируются и ливают проект. А потом рефактори за ними их эксперименты.

Минутка продаж


Если жалко брать большой реакт для маленького приложения, возьмите $mol

https://pavelzubkov.github.io/my_app

декларативное описание приложения https://github.com/PavelZubkov/my_app/blob/master/app.view.tree

логика к нему на ts
https://github.com/PavelZubkov/my_app/blob/master/app.view.ts

стили
https://github.com/PavelZubkov/my_app/blob/master/app.view.css.ts

Если декларативное описание сложно прочитать, можно спросить у chatgpt

Sign up to leave a comment.

Articles