@Nikitos2002

Всегда ли нужно стремиться к неизменяемости объектов?

Делал лабораторную по ооп на c#, сначала сделал без неизменяемости: для полей, которые нужно изменять оставил сеттер, для остальных - только геттер. Но преподаватель попросил сделать объекты неизменяемыми и сделать это с помощью билдера. Сделал, но код стал менее понятным, и тесты писать стало труднее, так как при попытке изменить объект создавался новый и приходилось искать этот новый объект, чтобы продолжить работу с ним. Ну и сам вопрос: в каких случаях лучше делать объекты неизменяемыми, а в каких можно обойтись ограничением некоторых полей?
  • Вопрос задан
  • 130 просмотров
Решения вопроса 1
Alexandroppolus
@Alexandroppolus
кодир
У неизменяемых объектов есть свои плюсы. Во первых, их легче сравнивать: вместо сравнения всех полей (рекурсивно) сравниваем только две корневые ссылки на объекты. Во вторых, можно расшарить некоторые внутренние структуры данных. Например, строка во многих ЯП (C#, Java, JS) - это неизменяемый объект. И в JS есть оптимизация - когда берем подстроку от строки, то используем тот же буфер данных. В случае изменяемой строки такой фокус бы не прокатил.

Разумеется, плюсы компенсируются минусами. В большом объекте долго делать изменения. Больше нагрузка на память и сборщик мусора. Так же нельзя такой объект передать куда-то и потом поменять - там, куда передали, будет устаревшая версия (это иногда хорошо, иногда плохо).

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

Войдите, чтобы написать ответ

Похожие вопросы