В функциональных языках рекомендуется делать все объекты immutable, и, хотя на работе я пишу на Java, тут тоже активно применяются функциональные подходы. Поэтому решила глубже разобраться в концепциях stateless / stateful.
📎 На поверхности лежит, что Stateful модель – это когда объекты имеют состояние и их можно менять. Stateless – когда они неизменяемы, и при изменении объекта фактически создается новый объект. Но для меня оказалось новым и неожиданным, что концепция иммутабельности также означает, что в программе невозможно различить два объекта, которые имеют одинаковые поля. А при мутабельности наоборот, каждый объект считается уникальным (даже если у них одинаковые поля). И можно рассматривать любой объект как пару – сам объект + некий его идентификатор. И поэтому stateful модель можно считать расширением stateless модели.
➖ В Java наоборот, по умолчанию объекты мутабельны, а для иммутабельности надо сделать много чего дополнительно: final поля, глубокое копирование в конструкторе, возвращение копий в геттерах. И, как оказалось, сравнение по полям в equals, для соблюдения концепции stateless.
✏️ Это с новой стороны прояснило для меня ситуацию со сравнением по ссылкам и с помощью метода equals. Если рассматривать разницу с точки зрения концепций stateful / stateless, то метод equals в Java можно считать техническим способом реализовать сравнение объектов в соответствии с выбранной концепцией. В случае мутабельности — подняться на уровень выше сравнения по ссылкам, чтобы определить для мутабельного объекта его уникальный идентификатор из его полей. А для иммутабельного — реализовать сравнение по всем его полям.
Post #69
83
- 🔥 1