Size: a a a

Software Design/Architecture/Zen

2020 October 07

DE

Dmitry Eliseev in Software Design/Architecture/Zen
Roman
Что значит "неожиданно обнаружится, что это изменило вектор"? Переводя это в плоскость юзеров и емейлов, ты предлагаешь менять в каком-то месте емейл юзеру так, чтобы все остальные места получили старый и уже неактуальный емейл?
В этом и подвох, что при работе с объектами-значениями вроде точек их удобно делать иммутабельными и клонировать. Что если в сервис отправки письма передать клон email-а юзера, чтобы при вызове user.changeEmail этот старый отправленный new Message(user.getEmail()) в этом message.email не поменялся. Это гарантирует корректность старых данных, но вызывает неудобство с поиском актуальных данных.

А в случае с юзером, который в системе и БД имеется один как сущность этот подход весьма спорный. С ним порой удобнее иметь в памяти один объект-синглтон и всем давать возможность дёргать его user.changeEmail. Чтобы в системе и в БД был один и тот же непротиворечивый объект, а не куча клонов юзера с разными почтами, при сохранении перезатирающих друг друга. Это гарантирует единственность и непротиворечивость сущности, но ограничивает горизонтальное масштабирование.

Поэтому в ООП чаще сами сущности делают как раз единственными и мутабельными оркестраторами значений, а объекты-значения делают иммутабельными клонируемыми.
источник

SM

Sergey Milimko in Software Design/Architecture/Zen
Apache DOG™
там где достаточно дешево
Как это понимать?
источник

R

Roman in Software Design/Architecture/Zen
Apache DOG™
потому что когда у тебя расшаренный доступ к памяти она может менятся когда угодно и как угодно
Окей. Она поменялась не "как угодно", а правильно — "как надо". Теперь новые данные актуальный, а старые — нет. Но программе всё равно, она берёт старые данные и работает с ними. Выглядит не очень
источник

T🐜

The Ant 🐜 in Software Design/Architecture/Zen
Roman
Господа, вернитесь из ямы байтоёбства. Объясните с практической стороны, почему объекты "неожиданно меняются" и почему некие места должны получать старый объект с неактуальными данными вместо нового, мутированного?
объект инкапсулирует какие-то данные. Если нам нужно поменять данные, почему мы должны менять объект?
источник

˸A

˸̧̨ ͅBlack Akula˸̧̨ ... in Software Design/Architecture/Zen
Алексей
прям таки отлично?
да, я выше пример скидывал: https://t.me/oop_ru/139539
источник

А

Алексей in Software Design/Architecture/Zen
это не отлично
источник

AD

Apache DOG™ in Software Design/Architecture/Zen
Sergey Milimko
Как это понимать?
разница по скорости с мутабельным несущественна.
источник

SM

Sergey Milimko in Software Design/Architecture/Zen
То есть всегда иммьютабельное всё делать раз дёшево?
источник

AD

Apache DOG™ in Software Design/Architecture/Zen
что плохого то?
источник

AD

Apache DOG™ in Software Design/Architecture/Zen
удобно
источник

R

Roman in Software Design/Architecture/Zen
The Ant 🐜
объект инкапсулирует какие-то данные. Если нам нужно поменять данные, почему мы должны менять объект?
У тебя есть текущая координата p = Point(1, 2, 3) объекта в пространстве. Объект переместился — координата поменялась p.moveTo(2, 3, 4) (скорее даже obj.moveTo(...), который вызовет p.moveTo(...)). Что не так? Почему мы вдруг должны создавать новую, если она — характеристика объекта?
источник

AD

Apache DOG™ in Software Design/Architecture/Zen
Roman
У тебя есть текущая координата p = Point(1, 2, 3) объекта в пространстве. Объект переместился — координата поменялась p.moveTo(2, 3, 4) (скорее даже obj.moveTo(...), который вызовет p.moveTo(...)). Что не так? Почему мы вдруг должны создавать новую, если она — характеристика объекта?
Характеристики разных обьектов
источник

AD

Apache DOG™ in Software Design/Architecture/Zen
в математике ты не можешь переместить точку
источник

AD

Apache DOG™ in Software Design/Architecture/Zen
Повернуть вектор
источник

AD

Apache DOG™ in Software Design/Architecture/Zen
и так далее
источник

AD

Apache DOG™ in Software Design/Architecture/Zen
и тем не менее она описывает перемещения, изменения и так далее
источник

R

Roman in Software Design/Architecture/Zen
Apache DOG™
Характеристики разных обьектов
Каких разных? Я — один и тот же объект. Если я шагну — я останусь тем же объектом. Причём тут математика?) Мы же моделируем системы
источник

А

Алексей in Software Design/Architecture/Zen
Roman
У тебя есть текущая координата p = Point(1, 2, 3) объекта в пространстве. Объект переместился — координата поменялась p.moveTo(2, 3, 4) (скорее даже obj.moveTo(...), который вызовет p.moveTo(...)). Что не так? Почему мы вдруг должны создавать новую, если она — характеристика объекта?
потому что кто-то другой может хранить ту же самую ссылку на ту же самую точку, которая неожиданно изменится
источник

AD

Apache DOG™ in Software Design/Architecture/Zen
Roman
Каких разных? Я — один и тот же объект. Если я шагну — я останусь тем же объектом. Причём тут математика?) Мы же моделируем системы
нет
источник

AD

Apache DOG™ in Software Design/Architecture/Zen
(ты, момент времени)
источник