ConstructiCat Logo
CodeBust.
Browse section ▾

Замена ссылки значением.

Problem

У вас есть объект-ссылка, который слишком маленький и неизменяемый, чтобы оправдать сложности по управлению его жизненным циклом.

Solution

Превратите его в объект-значение.

##Example

До
Change Reference to Value - Before
После
Change Reference to Value - After

##Why Refactor

Побудить к переходу от ссылки к значению могут возникшие при работе с объектом-ссылкой неудобства.

Объектами-ссылками необходимо некоторым образом управлять:

  • всегда приходится запрашивать у объекта-хранилища нужный объект;

  • ссылки в памяти тоже могут оказаться неудобными в работе;

  • работать с объектами-ссылками, в отличие от объектов-значений, особенно сложно в распределённых и параллельных системах.

Кроме того, объекты-значения будут особенно полезны, если вам больше подходит неизменяемость объектов, чем возможность изменения их состояния во время жизни объекта.

##Benefits

  • Важное свойство объектов-значений заключается в том, что они должны быть неизменяемыми. При каждом запросе, возвращающем значение одного из них, должен получаться одинаковый результат. Если это так, то не возникает проблем при наличии многих объектов, представляющих одну и ту же вещь.

  • Объекты-значения гораздо проще в реализации.

##How to Refactor

  1. Обеспечьте неизменяемость объекта. Объект не должен иметь сеттеров или других методов, меняющих его состояние и данные (в этом может помочь удаление сеттера). Единственное место, где полям объекта-значения присваиваются какие-то данные, должен быть конструктор.

  2. Создайте метод сравнения для того, чтобы иметь возможность сравнить два объекта-значения.

  3. Проверьте, возможно ли удалить фабричный метод и сделать конструктор объекта публичным.