Ответы пользователя по тегу Проектирование программного обеспечения
  • Как лучше возвращать ошибку API?

    myks92
    @myks92
    Нашёл решение — пометь вопрос ответом!
    1. Если у вас есть доступ к беку, то вам лучше ошибки переводить на нем. Отображение ошибки в зависимости от локали. Переводить лучше тут, так как клиентов вашего api может быть много и будет очень странно если одна и та же ошибка на web будет переведена не так, как в mobile.
    2. Если у вас доступа к беку нет, то я бы на уровне ApiClient сделал обработку и перевод всех ошибок в одном месте. Например, axios может сделать это в одном месте.

    Но есть список ошибок, которые не нужно переводить и выводить их на frontend. Например, ошибки со статусом ответа от 400 до 499 могут быть отображены клиенту, а остальные особого смысла для детализации и перевода не имеют смысла.

    Кроме обработки статуса ответа можно ещё и смотреть на код ответа, как написали в соседнем ответе. Коды ответов не всегда удобны для простой разработки. Так как требуют дополнительной разработки со стороны api и дополнительной обработки со стороны клиента.
    Ответ написан
    Комментировать
  • Что лучше для опроса статусов платежей, крон задача или отложенные сообщения через rabbitmq сервер?

    myks92
    @myks92
    Нашёл решение — пометь вопрос ответом!
    Ни тот и ни другой. Переходите на Message Driven архитектуру. Вместо того, чтобы делать постоянные запросы кроном к сервису лучше сделайте публикацию события в RabbitMQ.

    В момент, когда платеж был выполнен публикуется интеграционное событие PaymentPaid. В это событие вкладываете все нужные данные, в том числе и ID по которым связываются платежи. Далее сервисы, которые заинтересованы в этих событиях подписываются на них и совершают нужные действия.

    При работе с RabbitMQ нужно помнить:
    1. Он гарантирует как минимум 1 раз доставить ваше сообщение. Это значит, что вполне может быть дубль и вам нужно быть готовым к этому. То есть делать идемпотентный консьюмер.
    2. Сообщение может быть не доставлено по причине недоступности сервиса очередей, так же и сообщение может быть потеряно, в том числе из-за недоступности сервиса. Поэтому вам нужно гарантировать доставку через Outbox.
    Ответ написан
    Комментировать
  • О чём архитектура ПО?

    myks92
    @myks92
    Нашёл решение — пометь вопрос ответом!
    Первая ссылка похоже на правду. Вторая тоже относится к архитектуре, но как-то слабо описано.

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

    Архитектура и про код, и про технологии, и про инфраструктуру.
    Ответ написан
    Комментировать
  • CQRS и кеш, как обновлять кеш?

    myks92
    @myks92
    Нашёл решение — пометь вопрос ответом!
    Кэш нужно обновлять по событию
    Ответ написан
    Комментировать
  • Хороший ли тон передавать Symfony\Component\HttpFoundation\Request в сервис?

    myks92
    @myks92
    Нашёл решение — пометь вопрос ответом!
    1. Работу с request используют высокоуровневые вещи вроде контроллеров, поэтому использовать их в своих сервисах не стоит. Ваш сервис это по сути слой связи приложения и вашего кода. Поэтому правильней всего переложить данные из request в какую-то DTO например из патерна CQRS это может быть Command(), Query()

    2. Даже когда вам потребуется передавать Request в какие-то свои классы, то лучше для этого использовать PSR интерфейсы. Тогда ваш Request будет фреймворконезависимым. .
    Ответ написан
    2 комментария
  • Где найти ссылки на хорошие yii2 проекты, где можно изучить хороший код?

    myks92
    @myks92 Куратор тега Yii
    Нашёл решение — пометь вопрос ответом!
    Очень сложных проектов на Yii2 с открытым, да ещё и хорошим кодом очень мало)) Прежде всего, потому что Yii создан для быстрой разработки нарушая все правила сложных архитектур. А учитывая его устарелость, то тем более таких проектов мало. На форуме давно обсуждался этот вопрос. Там есть ссылки на проекты и код. Так же на сайте yiipowered.com есть список проектов, у некоторых с исходным кодом.

    Вам лучше изменить тактику и искать проекты с хорошей архитектурой вне зависимости от фреймворка. Так ваша вероятность найти что-то стоящее на много выше. В целом, хорошая архитектура - это всегда дорого. Мало кто будет выкладывать проект большой команды, на которую были потрачены сотни тысяч и миллионы в открытый доступ. Кроме того хорошая архитектура всегда зависит от требований, задач и самого проекта. Что и где применять, как строить - придет только со знанием и опытом. Здесь не получится сделать по примеру.

    Если по теме, то начните изучать или искать DDD, CQRS, SOA, Микросервисы. В принципе это основные архитектурные подходы в разработке. На Yii по DDD есть хороший пример. Однако начинать НОВЫЙ проект на Yii2 используя даже самую сложную архитектуру - путь в никуда. Yii2 создан для других целей. Чтобы понять можно посмотреть ответ на вопрос: Актуален ли Yii2 Фреймворк в 2020?
    Ответ написан
    Комментировать
  • Какие проблемы решает DI-фреймворк?

    myks92
    @myks92
    Нашёл решение — пометь вопрос ответом!
    Описание из Yii и Symfony
    Ответ написан
    Комментировать
  • Как правильно организовать сохранение состояния модели перед изменением?

    myks92
    @myks92 Куратор тега Yii
    Нашёл решение — пометь вопрос ответом!
    Создайте дополнительное поле json и туда сохраняйте состояние текущих полей, версию или просто дату создания. При модификации добавляете в массив новые данные. При откате просто заменяете текущие данные на данные из версии. Но это такое себе решение)

    Вот более подробно. https://m.habr.com/ru/post/101544/

    Это если просто. Мои мысли такие. Вообще, лучше добавить другие теги и может ещё что подскажут. Это не совсем про Yii
    Ответ написан
    1 комментарий
  • Что почитать про правильное проектирование своих приложений?

    myks92
    @myks92
    Нашёл решение — пометь вопрос ответом!
    К дополнению выше.

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

    Архитектура приложения. Как сделать независимые модули (сервисы)?
    Ответ написан
    Комментировать