Size: a a a

Software Design/Architecture/Zen

2020 December 27

ЕР

Евгений Ромашкан... in Software Design/Architecture/Zen
Модель свой стейт контролирует по прежнему
источник

AK

Aleh Kashnikau in Software Design/Architecture/Zen
Evgeniy Kuvshinov
но может потребоваться сделать запись в историю отправленных смс... (а это уже внутренний стейт)
и как тогда правильно ?
это точно должно быть в phone или в user?
источник

k

knopkod4v in Software Design/Architecture/Zen
а я бы историю отправленных смс где-то рядом с sender-ом наверное хранил. Во всяком случае если это просто история отправки смс. Ну т.е. она никак не влияет на бизнес логику если 🤔
по идее у инфраструктуры тоже может быть стейт
источник

EK

Evgeniy Kuvshinov in Software Design/Architecture/Zen
Aleh Kashnikau
это точно должно быть в phone или в user?
ну это просто абстрактный пример в вакуме же)
источник

DT

Dmitriy Tkachenko in Software Design/Architecture/Zen
knopkod4v
а я бы историю отправленных смс где-то рядом с sender-ом наверное хранил. Во всяком случае если это просто история отправки смс. Ну т.е. она никак не влияет на бизнес логику если 🤔
по идее у инфраструктуры тоже может быть стейт
terraform пример) там есть стейт инфраструктуры
источник

AK

Aleh Kashnikau in Software Design/Architecture/Zen
Evgeniy Kuvshinov
ну это просто абстрактный пример в вакуме же)
Ну он вроде не влияет на ситуацию никак, можно хранить факт отправки, желательно где-то около кода отправки, возможно нужны будут ретраи, возможно это тоже надо будет хранить и все это для кода отправки смски пользователю должно быть крайне не важно, никак не влиять на smsGateway.send(phoneNumber, text)
источник

EK

Evgeniy Kuvshinov in Software Design/Architecture/Zen
Aleh Kashnikau
Ну он вроде не влияет на ситуацию никак, можно хранить факт отправки, желательно где-то около кода отправки, возможно нужны будут ретраи, возможно это тоже надо будет хранить и все это для кода отправки смски пользователю должно быть крайне не важно, никак не влиять на smsGateway.send(phoneNumber, text)
речь о ситуации что изначально отправка смс не меняла стейт (не имела истории)
реализовали это как
smsGateway.send(user.phone, text) (метод отправки не часть rich model исходя и слов выше)
через какое то время надо было сохранять историю отправленных сообщений, что мы можем ?
1. внутри smsGateway можем генерировать записи
2. Изменить отправку из user.send(smsGateway, text) и уже внутри менять стейт
3. Пройтись по коду и где отправляли смс добавить user.history(text)
4. какие либо другие варианты
источник

Kd

Konstantin dmz9 in Software Design/Architecture/Zen
Evgeniy Kuvshinov
речь о ситуации что изначально отправка смс не меняла стейт (не имела истории)
реализовали это как
smsGateway.send(user.phone, text) (метод отправки не часть rich model исходя и слов выше)
через какое то время надо было сохранять историю отправленных сообщений, что мы можем ?
1. внутри smsGateway можем генерировать записи
2. Изменить отправку из user.send(smsGateway, text) и уже внутри менять стейт
3. Пройтись по коду и где отправляли смс добавить user.history(text)
4. какие либо другие варианты
можно было сразу нормально написать с интерфейсом а потом декоратор к нему для сохранения истории
интерфейс пишешь в духе gate.notifyUserDidSomething ( user ): Boolean, дальше внутри разберется что делать.
история поверх наворачивается как декоратор
контроль доступа тоже поверх наворачивается как декоратор
количество измененных мест в коде - 1
источник

EK

Evgeniy Kuvshinov in Software Design/Architecture/Zen
Konstantin dmz9
можно было сразу нормально написать с интерфейсом а потом декоратор к нему для сохранения истории
интерфейс пишешь в духе gate.notifyUserDidSomething ( user ): Boolean, дальше внутри разберется что делать.
история поверх наворачивается как декоратор
контроль доступа тоже поверх наворачивается как декоратор
количество измененных мест в коде - 1
можно много что сразу предположить но не всегда это потом окупается
требование о добавление истории может появится и через год после запуска проекта
источник

Kd

Konstantin dmz9 in Software Design/Architecture/Zen
Evgeniy Kuvshinov
можно много что сразу предположить но не всегда это потом окупается
требование о добавление истории может появится и через год после запуска проекта
поэтому сначала
- шаг рефакторинга на выделение интерфейса абстракции
- заворачивание в декоратор
источник

AK

Aleh Kashnikau in Software Design/Architecture/Zen
Evgeniy Kuvshinov
речь о ситуации что изначально отправка смс не меняла стейт (не имела истории)
реализовали это как
smsGateway.send(user.phone, text) (метод отправки не часть rich model исходя и слов выше)
через какое то время надо было сохранять историю отправленных сообщений, что мы можем ?
1. внутри smsGateway можем генерировать записи
2. Изменить отправку из user.send(smsGateway, text) и уже внутри менять стейт
3. Пройтись по коду и где отправляли смс добавить user.history(text)
4. какие либо другие варианты
Лично я бы избегал вообще пихать в юзера это, максимум юзер айдишку прокидывать к месту сохранения
источник

EK

Evgeniy Kuvshinov in Software Design/Architecture/Zen
я могу сходу еще несколько вариантов предложить не факт что именно твой или один из предложенных мной будут правильными
источник

Kd

Konstantin dmz9 in Software Design/Architecture/Zen
Evgeniy Kuvshinov
я могу сходу еще несколько вариантов предложить не факт что именно твой или один из предложенных мной будут правильными
так а что считать правильным, какие критерии?
чего хотим добиться в идеале? "всегО" ? )
источник

EK

Evgeniy Kuvshinov in Software Design/Architecture/Zen
вот об этом и речь что способ реализации зависит от целей (требований)
источник

EK

Evgeniy Kuvshinov in Software Design/Architecture/Zen
и нет правильно в виде рич модели или анемик модели
источник

EK

Evgeniy Kuvshinov in Software Design/Architecture/Zen
имхо
источник

AK

Aleh Kashnikau in Software Design/Architecture/Zen
Evgeniy Kuvshinov
и нет правильно в виде рич модели или анемик модели
Можно и go-to писать постоянно вместо вызовов функций, if-else-for
источник

g

grunge_r in Software Design/Architecture/Zen
А при анемик модели не тот же старый добрый процедурный код получается?
источник

AK

Aleh Kashnikau in Software Design/Architecture/Zen
grunge_r
А при анемик модели не тот же старый добрый процедурный код получается?
Тот же
источник

YG

Yury Golikov in Software Design/Architecture/Zen
grunge_r
А при анемик модели не тот же старый добрый процедурный код получается?
Можно фп)
источник