Периодически провожу рефакторинг своего кода,
который пишу не на работе, а тот что пишется в свободное время, так сказать "для себя".
В этот раз я понял что парные методы вроде таких
Init(), RunAny()
Open(), Execute()
Prepare(), Make()
— не есть гуд.
Т.е. методы между которыми существует связь по состоянию инстанса — это источник багов:
— забываем делать вызов Init() раньше RunAny()
— из кода труднее понять что на самом деле вызывается раньше
Отсюда вывод: методы одного класса (интерфейса) не должны зависеть друг от друга. Этого можно достичь например так:
interface IContext
{
IRunContext Init();
}
interface IRunContext
{
void RunAny();
}
Теперь сразу видно по коду что должно раньше чего вызыватся. Т.е. самодокументруемый код.
Ближе к функциональному стилю программирования (методы становятся функциями).
Я не открыл америку, об этом вроде как писал Макконел.
Но здесь есть и минусы:
— появилась новая сущность IRunContext, которую надо имплементировать
— "..каждый новый тип усложняет код.." — вообще противоречит этому подходу.
— с практической точки зрения так больше кода, чего никто не любит
Где правило, когда стоит так делать а когда нет? Кто что думает.