Переменные экземпляра против передачи параметров? Есть ли аргумент? - PullRequest
14 голосов
/ 16 ноября 2010

Итак,

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

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

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

Ответы [ 2 ]

9 голосов
/ 16 ноября 2010

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

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

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

9 голосов
/ 16 ноября 2010

Таким образом, на плюсовом сайте вам не придется передавать эти аргументы другим методам. Когда метод имеет более трех аргументов (согласно Чистый код Роберта Мартина ), читаемость вашего кода начинает быстро снижаться. Я думаю, что вы должны смешать эти два метода, чтобы поставить лучший результат.

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

...