Какими должны быть методы класса
От: barn_czn  
Дата: 14.04.10 07:00
Оценка:
Периодически провожу рефакторинг своего кода,
который пишу не на работе, а тот что пишется в свободное время, так сказать "для себя".

В этот раз я понял что парные методы вроде таких

Init(), RunAny()
Open(), Execute()
Prepare(), Make()

— не есть гуд.

Т.е. методы между которыми существует связь по состоянию инстанса — это источник багов:
— забываем делать вызов Init() раньше RunAny()
— из кода труднее понять что на самом деле вызывается раньше

Отсюда вывод: методы одного класса (интерфейса) не должны зависеть друг от друга. Этого можно достичь например так:


interface IContext
{
IRunContext Init();
}

interface IRunContext
{
void RunAny();
}


Теперь сразу видно по коду что должно раньше чего вызыватся. Т.е. самодокументруемый код.
Ближе к функциональному стилю программирования (методы становятся функциями).

Я не открыл америку, об этом вроде как писал Макконел.
Но здесь есть и минусы:
— появилась новая сущность IRunContext, которую надо имплементировать
— "..каждый новый тип усложняет код.." — вообще противоречит этому подходу.
— с практической точки зрения так больше кода, чего никто не любит

Где правило, когда стоит так делать а когда нет? Кто что думает.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.