Size: a a a

Software Design/Architecture/Zen

2021 June 18

SF

Segmentation Fault in Software Design/Architecture/Zen
Некашерно, нарушается SRP
источник

SF

Segmentation Fault in Software Design/Architecture/Zen
В таком случае я вполне развернуто ответил
источник

МФ

Максим Федоров... in Software Design/Architecture/Zen
Не нарушается

Ответственность сохранить и все с ней хорошо и стабильно

Практически ноль причин для изменения этого метода (в контексте темы), потому он и сидит в фреймворке
источник

SP

Sergey Protko in Software Design/Architecture/Zen
не вижу причин использовать PATCH - разве что у тебя отправляются какие-то специфичные структуры которые преобразование данных описывают. Это оч специфично.
источник

SP

Sergey Protko in Software Design/Architecture/Zen
источник

SP

Sergey Protko in Software Design/Architecture/Zen
REST это не про апишки. Для апишек тебе хватит понятия идемпонетности из специфкации HTTP (полезно для обработки ошибок и ретраев) и концепции URI если вдруг хочешь юзать http кэширование (что скорее всего ты не захочешь юзать, проще кэш на уровне приложения организовывать если мы говорим про SPA/Mobile App. Http кэш красиво когда у тебя сервер рендрит инфу.

Не еби себе голову со всеми этими "рестами" и делай просто Json RPC over http. Всеравно у тебя именно это и выйдет. Хочешь ты того или нет. Как не притворяйся
источник

SP

Sergey Protko in Software Design/Architecture/Zen
даже http статус коды больше чем для ошибок транспорта не катят (что бы ретраи опять же было удобно делать)
источник

П

Павел in Software Design/Architecture/Zen
источник

П

Павел in Software Design/Architecture/Zen
Все норм выйдет
источник

SF

Segmentation Fault in Software Design/Architecture/Zen
Если у тебя save сохраняет и обновляет, то это нарушение SRP
источник

П

Павел in Software Design/Architecture/Zen
По факту этот метод большую часть времени обновляет. Сохранение это первый шаг. Если нечего обновлять, нужно сохранить. Я тоже не вижу тут нарушения.
источник

МФ

Максим Федоров... in Software Design/Architecture/Zen
Сохраняет и все

А добавляет или обновляет — решайте выше, когда сохраняетесь новый или имеющийся

Или ниже, подменяя реализацию, если нужно отойти от готового решения
источник

П

Павел in Software Design/Architecture/Zen
Открыл Ворд. Создал документ. Написал строчку. Сохранил. Написал ещё строчку сохранил. Что может измениться в создании, что повлияет на способ сохранения?
источник

SP

Sergey Protko in Software Design/Architecture/Zen
все стардали этой хуйней.
источник

SP

Sergey Protko in Software Design/Architecture/Zen
нет если у тебя это PUT и он идемпотентен
источник

DT

Dmitriy Tkachenko in Software Design/Architecture/Zen
Что странно, REST предполагает POST как создание записи, PATCH как изменение. И более того PUT который заменяет или создает новую запись
источник

DT

Dmitriy Tkachenko in Software Design/Architecture/Zen
А споры про то нарушает save srp или нет😂
источник

SP

Sergey Protko in Software Design/Architecture/Zen
1. PATCH не входит в спецификацию HTTP 1.1 и как следствие утверждать что PATCH это "чет про REST" можно так же как утверждать что WebDAV это REST (и любая другая надстройка над http)
2. REST ничего такого не предполагает. REST (а точнее спека HTTP 1.1, которая входит в набор спецификаций для которых REST теоритическое обоснование выбранной модели) лишь вводит разделение что PUT должен гарантировать идемпотентность операции а POST не обязан ее гарантировать. При этом оба "не должны иметь тела ответа" но на это все забивают)
источник

SP

Sergey Protko in Software Design/Architecture/Zen
классическая проблема - корреляция между "реурсами HTTP" и "сущностями в базе". Вот на этом месте у большинства каша в головах которая приводит к сложным и неудобным апишкам и высокой связанности в коде.
источник

SP

Sergey Protko in Software Design/Architecture/Zen
Примеры "валидных" с точки зрения REST операций которые скорее всего людям тут покажутся "не рестфул же блиать"
POST /get-some-value-and-increase-counter
PUT /some-record/{id} - будет создавтаь и обновлять если уже есть
POST /record/{id}/increase-counter
источник