У @JaredPar есть лучший ответ, IMO, но ни один из ответов не является отличным, потому что сегодня для этого нет "отличных" решений. Нам нужны лучшие инструменты и рекомендации по проектированию, которые развиваются вместе с инструментами, чтобы лучше справляться с растущей популярностью неизменяемых объектов.
Ответ @JonSkeet хорошо работает в контексте API, где почти все изменчиво, но он падает, поскольку неизменяемые объекты становятся нормой (поскольку все методы имеют длинные ужасные имена).
«Лучшее» имя зависит от контекста кода, которым вы окружены. Единственная стратегия, которая, на мой взгляд, жизнеспособна в диапазоне контекстов от «в основном изменчивого» до «в основном неизменяемого», - это та, о которой упоминает Джаред, где инструменты делают очевидным, является ли данный объект неизменным, а затем каждый метод имеет «императив». name (egoAdd), которое либо оказывает побочное действие на объект-получатель (если он изменяемый), либо возвращает новый объект (если он неизменяемый).
(Кроме того: к сожалению, «беглые» эффективные API, такие как StringBuilder, означают, что вы не можете просто посмотреть на сигнатуру метода, чтобы решить, является ли объект-получатель неизменным, поскольку такие примеры «возвращают это», чтобы быть беглым, давая ту же сигнатуру как «вернуть копию».)
person
Brian
schedule
04.04.2009