Где вы добавляете новые методы? - PullRequest
1 голос
/ 18 июня 2009

Когда вы добавляете новый метод в класс, куда вы его помещаете? В конце урока ... верх? Вы организуете методы в определенные группы? Отсортировано по алфавиту?

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

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

Обновление 2 Мммм ... думаю, вопрос не так ясен, как я думал. Я на самом деле не ищу организацию классов. Я особенно заинтересован в добавлении нового метода в существующий класс. Например:

public class Attendant
{
    public void GetDrinks(){}
    public void WelcomeGuests(){}
    public void PickUpTrask(){}
    public void StrapIn(){}
}

Теперь мы собираемся добавить новый метод PrepareForCrash(). Куда это идет? Вверху списка, внизу, в алфавитном порядке или рядом с методом StrapIn(), поскольку он связан.

Ответы [ 7 ]

5 голосов
/ 18 июня 2009

Рядом с "StrapIn", потому что это связано. Таким образом, если вы выполните рефакторинг позже, весь связанный код будет рядом.

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

3 голосов
/ 18 июня 2009

Ради бога, а не по алфавиту!

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

1 голос
/ 18 июня 2009

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

public class classname  
{
    <member variables>

    <constructors>
    <destructor>

    <public methods>

    <protected methods>

    <private methods>
}

Причина этого как таковая.

Переменные-члены вверху
Чтобы увидеть, какие переменные-члены существуют и инициализируются ли они.

Конструкторы Чтобы узнать, настроены ли переменные-члены и каковы все параметры построения для класса.

Destructor
Чтобы увидеть, как очищается класс, и проверить его с помощью конструкторов и переменных-членов.

Открытые методы
Для просмотра доступных контрактов можно использовать вызывающие объекты объекта.

Защищенные методы Чтобы увидеть, какие унаследованные классы будут использовать.

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

ОБНОВЛЕНИЕ - на основе обновления ОП
Логически хорошим способом было бы организовать методы по категориям того, что они делают. Таким образом, вы получаете возможность категоризации ваших методов, а также алфавитный поиск в вашей IDE (при условии, что это в вашей IDE).

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

Если бы вы сделали это стандартом, было бы довольно сложно определить границы для размещения каждого метода.

0 голосов
/ 18 июня 2009

ИМХО: Если вы организуете свои методы в алфавитном порядке, поставить новый зависит от его названия. В противном случае поместите его внизу связанной группы. Это помогает узнать, какой метод новее. Большая проблема заключается в том, как организовать методы в группах, например, зависит от того, какие свойства, но это более индивидуально для каждого и зависит от конкретного класса.

0 голосов
/ 18 июня 2009

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

0 голосов
/ 18 июня 2009

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

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

0 голосов
/ 18 июня 2009

Что мне нравится в C # и VB.net, так это возможность использовать теги #region, поэтому в целом мои классы выглядят так

class MyClass
{

#region Constructors

public MyClass()
{
}

public MyClass(int x)
{
_x = x;
}

#endregion

#region Members
private int _x;
#endregion

#region methods
public void DoSomething()
{
}
#endregion

#region Properties
public int Y {get; private set;}
#endregion

}

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

...