• Есть ли такая платформа где можно принять участие в командной разработке?

    approximate_solution
    @approximate_solution
    JS Developer. Angular\React\Vue\Ember
    Open Sourse проекты на Github
    Ответ написан
    Комментировать
  • Правильно ли выбрасывать исключения в бизнес логике?

    php666
    @php666
    PHP-макака
    Нет, это плохая практика.

    Исключительная ситуация на то и исключительная. Это ошибка запроса, нет коннекта к БД или отсутствие записи, которая, как мы уверены, должна существовать и тд. Это событие, после которого работа кода НЕВОЗМОЖНА.

    Оборачивая в исключения бизнес-логику ты расписываешься в кривой архитектуре. Валидация - это отдельный слой, который не должен давать никаких исключений, это штатный механизм системы, который должен отдать корректный ответ клиентскому коду, который его использует.
    Ответ написан
    3 комментария
  • Скажите как вам мой код?

    Maksclub
    @Maksclub Куратор тега PHP
    maksfedorov.ru
    require_once 'classes.php';
    Перейти на Композер и неймспейсы

    class smartPhoneProduct
    Оставить Product, а тип товара вынести в свойство товара type или в category

    Все, что касается модификаций — вынести в характеристики, например может подойтиEAV, то есть некая сущность Характеристика с product_id, name, value и таких быть может много у одного товара. Или иной способ работы, главное чтобы при добавлении сотен характеристик вам не пришлось бы сотнями файлов классы придумывать и всегда был один Product, ну или были др причины создавать детей, например простой товар и цифровой...
    Альтернативы EAV обсуждались например тут: Альтернатива EAV, структура базы?

    getProduct()
    После исправления предыдущего шага данная штука product->getProduct() устранится, а сериализация должна быть в другом слое, товар не должен знать ничего про то, как отображать его, тк отображений может быть много (в каталоге, в письме, в отчетах, в корзине)

    echo "\nСкидка: " .$discountOnProduct. "P";
    echo — вывод, бизнес-объект не должен ничего знать про вывод, ответ сервера и прочее, должен быть просто return $this->description()
    Тем более цена не должна идти в описании, а быть неким getPrice(), причем как правило это делают не у товара, а у вариантов/предложений товара, которые с товаром связаны 1 к 1

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

    это основное... к код-стайлу пока претензии не имеют смысла
    Ответ написан
    6 комментариев
  • Symfony или Slim framework?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Нету в симфони никакого миллиона классов из коробки. Это какое-то дикое суеверие.
    Ответ написан
    6 комментариев
  • На сколько плохо/хорошо менять компании с интервалом чаще, чем раз в год?

    Winsik
    @Winsik
    сис.админ, недопрограммист :)
    Если не нравиться и есть куда уходить - надо уходить. Вы ещё молоды, надо набираться опыта и на смену компаний в начале карьеры никто не обратит внимание, смотреть будут на ваш опыт и знания.
    Ищите компанию где вам интересно, работа должна быть в радость, должно хотеться приходить и уходя думать о том, что будет сделано завтра. При таком кейсе повышение квалификации идёт огромными шагами. И в будущем на очередном собеседовании вы своими познаниями сможете "уболтать" работодателя и не важно сколько раз вы меняли работу )
    Ответ написан
    1 комментарий
  • Правда ли что другие пользователи смогут использовать мой айпи адрес в качестве входной, средней, и выходной ноды?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Читайте документацию по настройке прежде, чем использовать. Точка.
    Ответ написан
    Комментировать
  • Зачем столько асинхронных инструментов в JavaScript?

    Xuxicheta
    @Xuxicheta
    инженер
    промисы и async это одно и тоже.
    И все это лишь сахар для коллбэков разной степени удобности. И вы еще евенты не упомянули. А так же цикл событий, таски/микротаски, квази-асинхронность.

    В язык входят те вещи, которые tc39 посчитают достойными этого. Промисы позволили писать цепочки более понятно, асинки избавили от обилия скобочек. Генераторы не прижились и редко где используются, хотя иногда я их применяю, по назначению разумеется, а не для асинхронного выполнения.

    И этого еще не хватает, неплохо было бы иметь поддержку Observable на уровне языка, многие браузерные api стали бы удобнее.
    Ответ написан
    2 комментария
  • Как структурировать Laravel приложение?

    Alex_Wells
    @Alex_Wells
    PHP/Kotlin
    Как хотите. Главная проблема - заблуждение о том, что laravel дает готовую структуру которой надо свято следовать - а все как раз наоборот. Он из коробки дает возможность строить структуру так, как вам хочется, без каких либо последствий.

    Я всегда сразу же разбиваю приложение на модули (домены) и там отталкиваюсь от нужной мне структуры.

    Слепо переносить код из контроллера в сервис не имеет смысла, имхо.
    Ответ написан
    Комментировать
  • Можно ли тут как-то избавится от плагиата?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Валидация форм ввода - отдельный специальный случай.
    И валидировать по одному полю - это действительно дикость и маразм.
    Если посмотреть на любой нормальный сайт, он не пишет тебе ошибки по одной. Он подсвечивает сразу все неправильно заполненные поля.

    Поэтому возврат должен быть действительно только один, а все ошибки собираться в массив.

    Да, и посмотри в словаре значение слова "плагиат"
    Ответ написан
    5 комментариев
  • Какие существуют эффективные способы найти связанный граф?

    inoise
    @inoise
    Solution Architect, AWS Certified, Serverless
    Есть специальный тип баз данных - графовые, например, Neo4j. Можно смотреть аналоги. Синтаксис Gremlin или SPARQL
    Ответ написан
    Комментировать
  • Что можно почитать по парсингу синатксических конструкций?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Трансляторы
    Седой и строгий
    SICP можно почитать для начала.
    Ответ написан
    Комментировать
  • Выбор коммуникации между сервисами?

    По окончанию регистрации необходимо отправить уведомление, поэтому логично сделать это через брокер сообщений (RabbitMQ и др.).
    Служба Уведомления представляет из себя потребителя очереди и рассылает письма асинхронно относительно регистрации.
    Сам транспорт менее важен чем то когда событие будет обработано.
    Транспортом может быть и HTTP, и WebSocket.
    Ответ написан
    Комментировать
  • Проектирования СУБД для хранения больших объемов?

    @zavodp
    для большого массива данных, речь про миллиарды записей(на данный момент 200млн).

    Это никакие не "большие данные".
    Для современного железа и современного СУБД - это ерунда.

    Стандартные решения на таких объемах начинают деградировать по скорости вставки/чтения(очень важно).

    Для чтения - индексы.
    Для вставки - bulk loading

    Приемлемое время отклика до 20 сек, конечно чем быстрее - тем лучше.

    Это троллинг?
    Или вы нам пишете из 1960 годов?

    Данные хранятся в одном ЦОДе. Сейчас 10-50 запросов/сек. В ближайщем будующем около 100запр/сек.

    Это не нагрузка вообще. Смешно.

    В данный момент используется MongoDB. Стурктура данных выглядит след образом(буду писать в терминах монги) - документе порядка 80 полей, с типом string, datetime, int, float, null, boolean. У записи есть уникальный ключ, с типом string(длиной в 30 символов). Поиск осуществляется по 30 полям и их возможным комбинациям. Необходимо читать в режиме реалтайм и делать всевозможные агрегационные операции с данными. На таких данных очень долго выполняется операция count.

    Индексы.
    А для агрегаций - подготовленные данные использовать. Count - всегда медленно, поскольку это полный перебор. Считать заранее, сохранять во вспомогательных данных.
    Смысла нет использовать MongoDB, если только вы не собираетесь это по огромному кластеру размазывать. Там и будет преимущество Монги.
    На 1-2-3 серверах классические реляционные СУБД типа PostgreSQL имеют преимущество перед Mongo.

    Поиск осуществляется по 30 полям и их возможным комбинациям

    Индексы по полям и комбинациям.
    См. план запроса чтобы понять какие именно индексы нужны.
    Ответ написан
    9 комментариев
  • Можете дать пару ответов про Event Sourcing?

    Robur
    @Robur
    Знаю больше чем это необходимо
    1) решается по разному, в идеале - все созданные ивенты немутабельные и лежат в базе вечно. Это позволяет избежать кучи проблем. То есть при изменении надо создавать event v2. Но - это только на несовместимые изменение, добавление поля обычно можно сделать совместимым. Код который будет работать с этим полем будет работать должен учитывать что description может быть а может и нет. Старый код который работал без description - будет работать как работал и останется без изменений.

    Чаще всего достаточно добавить новые ивенты для новых вещей. Например раньше были аггрегаты без description, теперь появилось это поле, это значит что появились какие-то операции над этим полем и вы можете добавить ивент DescriptionAdded вместо того чтобы менять event создания.
    Однако я встречал статьи о том что люди переписывали историю ивентов для поддержки нового формата - возможно в каких-то случаях это действительно более оптимально. Не делал, подводных камней не знаю.

    2) создавать "исправляющие" ивенты. например ваш баг добавил всем к дню рождения лишний день при создании пользователей - создаете еще ивенты которые отнимают этот день.

    3) Зависиот от реализации стора, но читать все ивенты из стора чтобы их пофильтровать в памяти в любом случае подход так себе. Реальное приложение при таком подходе загнется крайне быстро.
    Для таких вещей используются проекции - когда из ивентов вы строите нужную модель в какой-то удобной форме и делаете запросы туда.

    например храните в SQL список todo на текущий момент, со всеми ивентами и просто делаете select * from todo.
    ну или хотя бы делаете таблицу со всеми create ивентами чтобы читать не 50 миллионов и фильтровать а сразу получить список аггрегатов одним запросом.
    Тут eventual consisntency встает в полный рост.
    Ответ написан
    2 комментария
  • Как быть уверенным, что группа запросов к базе будет выполнена?

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

    Сам спросил, сам и ответил ¯\_(ツ)_/¯
    Ответ написан
    6 комментариев
  • Какое направление/сферу выбрать?

    like-a-boss
    @like-a-boss
    Признайся,тебяТянетНаКодМужика,ты—программный гей
    Самым главным критерием для вас должно быть то, что вам самому нравится, а не мнение незнакомцев из интернета. Так как с этим придётся проводить ооочень много времени. Даже в том, что действительно нравится можно перегореть, а в ином - так и подавно.
    Ответ написан
    Комментировать
  • React + php, правильно ли я понял суть?

    @Kafkae
    0. Реакту все равно откуда приходят данные.
    1. Да.
    2. Имеет, если вам нужен SSR. Если он вам не нужен, то на беке ничего рисовать не надо.
    3. Да.
    Ответ написан
    Комментировать
  • Книги и ресурсы по ООП?

    @ddd329
    Если можно, то отвечу чего точно не стоит смотреть/читать, так это то, когда начинают говорить что-то наподобие такого:
    Ну вот представьте что у вас есть кошечка и собачка. Кошечка мяукает, а собачка лает, т.е. они все умеют говорить, но каждый по-своему. Кошечка и собачка это животное, значит выделим базовый класс Animal...

    Да и вообще, когда говорят, что ООП моделирует реальный мир... Бегите сразу от таких преподователей...
    Ответ написан
    3 комментария
  • Как оптимизировать данный PHP код?

    SilenceOfWinter
    @SilenceOfWinter Куратор тега PHP
    та еще зажигалка...
    подставлять в шаблон переменную с названием дня или 'сегодня'. в индию надо переезжать, будешь гуру)))
    Ответ написан
    4 комментария
  • Какие бывают фреймворки для веб?

    inoise
    @inoise
    Solution Architect, AWS Certified, Serverless
    Фреймворки есть вообще для всего. Рядом с любым направлением можно поставить слово *фреймворк* и найти результаты в поиске
    Ответ написан
    5 комментариев