2010-05-28 6 views

ответ

1

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

1

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

Наличие некоторой значимой части кода, разделенной на метод, вызываемый другими методами, является еще одним примером повторного использования кода, которое является хорошим, если вы действительно не переусердствовали.

1

Отсутствует. Похоже, что вы нашли действительное применение для поддержки DRY principles.

0

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

3

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

Фактически, не Это может быть анти-шаблон. Если вы постоянно вызываете методы другого класса, это называется Feature Envy, и вы, вероятно, должны сочетать классы. Если вы ставите всю реализацию в одну гигантскую функцию, это просто недостижимо и, вероятно, содержит много дубликатов кода.

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

0

Да, если эти методы являются допустимыми, то есть если класс и/или методы не являются окончательными. Причина в том, что подклассы, которые пытаются переопределить поведение или предоставить уровень обслуживания, не могут сделать это надежно, потому что этот слой можно вводить несколько раз. Пример (псевдо-код Scala), где мы предполагаем, что HashSet.addAll называет свою собственную HashSet.add:

class MemCountingSet[T] extends HashSet[T] { 
    private def sizeOf(t: T) = ... 

    private var memCount = 0 

    def add(t: T) = { 
    memCount += sizeOf(t) 
    super.add(t) 
    } 
    def addAll(coll: Collection[T]) = { 
    memCount += coll.foreach(sizeOf) 
    super.addAll(coll) 
    } 
} 

При использовании addAll мы теперь в конечном итоге двойного счета.

Смежные вопросы