Переменные экземпляра против передачи параметров? Есть ли аргумент?

Итак,

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

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

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

Ответ 1

На плюс-сайте таким способом вам не придется передавать эти аргументы другим методам. Когда метод имеет более трех аргументов (согласно Robert Martin Clean Code), читаемость вашего кода начинает быстро уменьшаться. Я думаю, вы должны смешать эти два метода, чтобы сделать лучший результат.

Что вы можете сделать, это посмотреть, можете ли вы извлечь новый класс из части существующего. Когда только часть методов использует эти поля экземпляра, возможно, эти методы делают что-то, что может быть абстрагировано. Таким образом, вы можете создать новый класс с полями экземпляра в качестве аргументов или свойств конструктора и создать его экземпляр.

Ответ 2

Я определенно думаю, что вы не должны просто брать локальные переменные и делать им переменные экземпляра , чтобы избежать их передачи. Это определенно не очень хорошая идея по причинам, которые вы уже перечисляли, включая тот факт, что он раздувает сам класс.

Независимо от того, что представляет собой эта переменная экземпляра, является свойством самого этого класса или нет, это не то, что может быть адресовано в целом. Это будет зависеть от объекта, который представляет класс. Однако этот дизайн связан с дизайном самого класса и, возможно, с его общим дизайном класса, который необходимо восстановить.

Если вы можете указать пример рефакторинга, на который вы ссылаетесь, это может помочь обеспечить лучший ответ в этом контексте