2016-08-09 10 views
0

Существует ли стандартная практика или соглашение о том, где объявлять методы, которые используются (или вызывают) только внутри других методов? Для демонстрации этого предположит следующее:Лучшая практика организации методов?

public class MyClass{ 
    methodA(); 
    methodB(); 
    methodC(); 

    public void methodA(){ 
     methodA1(); 
     methodA2(); 
    } 
    public void methodB(){ 
     methodB1(); 
     methodB2(); 
    } 
    private void methodA1(){ 
     do something; 
    } 
    private void methodA2(){ 
     do something; 
    } 
} 

Или есть другой способ codding, которые могли бы улучшить читаемость выше? Я прочитал другие вопросы с похожими темами, но они не затрагивают мой вопрос, который специфичен для mothods, которые используются внутри других методов. Вы можете предположить, что методA, methodB и methodC имеют логическую и значимую последовательность для конкретной задачи. Моя проблема в том, что другие методы (methodA1, methodA2, ...) не дают смысла в этой задаче, они дают смысл только внутри методов, которые они вызывают. Или, не следует ли мне беспокоиться о том, где размещать объявления метода вообще?

+0

Прокси-шаблон? https://en.wikipedia.org/wiki/Proxy_pattern – Stefan

+1

публичные методы сначала, затем защищенные, а затем частные. делает его немного легче читать. – pecks

+0

В недавнем исследовании по пониманию программы результаты показали, что ответ, вероятно, есть: любой последовательный порядок. – Elazar

ответ

1

Методы должны быть упорядочены таким образом, чтобы они читали, как история, которая не вызывает читателю нужно прыгать вокруг кода слишком много

Роберт C Мартин (он же дядя Bob)

Что это означает (короче говоря), заключается в том, что ваш метод A1, методA2 должен быть помещен после метода A (который их использует). То же, что и методB методB1, способB2. Я ожидал увидеть что-то вроде этого:

public class MyClass{ 
methodA(); 
methodB(); 
methodC(); 

public void methodA(){ 
    methodA1(); 
    methodA2(); 
} 

private void methodA1(){ 
    do something; 
} 
private void methodA2(){ 
    do something; 
} 

public void methodB(){ 
    methodB1(); 
    methodB2(); 
} 

public void methodB1(){ 

} 

public void methodB2(){ 

} 
} 

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

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

+0

Вы разместили методA1 & methodA2 после методаA не раньше. – Addis

+0

Извините, опечатка @Addis. Я отредактировал свой ответ. MethodA1 и methodA2 следует размещать после метода A (который их использует) – sestus

0

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

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

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

0

Если только одна функция вызывает метод и вызывает ее только один раз, вы можете просто использовать одну функцию.

Если он вызывает его несколько раз, поместите его прямо перед «родительской» функцией без каких-либо разрывов между ними. Если читаемость будет затронута (например, Javadocs будет получить перепутан с тысячами бесполезных функций) считает, скрывая их всех под один с util_/internaluse_//ZZZ приставки или parentname_ как methodA_methodA1

Если вызываются несколько функции это скорее функция полезности. Поэтому рассматривайте это как таковое. Некоторые из этих функций полезности могут стать классом полезности.

Кроме того, лично я использую стиль C++. поэтому члены, то A1, A2, A, B1, B2, B.

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

  • Нет связанных вопросов^_^