Нет ничего плохого в коде, который работает ... пока кто-то не придет его поддержать. В частности, соглашение такого рода должно быть задокументировано довольно тщательно, поскольку не сразу очевидно, как ваш класс будет делать то, что он делает.
(Тем не менее, использование Reflection для этого будет довольно медленным.)
Наиболее очевидным способом может быть использование абстрактного базового метода bool Validate()
, который реализуется подклассами. Подклассы тогда имеют, например,
public override bool Validate()
{
return TestFirst() &&
TestSecond() &&
TestThird();
}
Хотя это выглядит громоздко, сразу видно, что происходит. Это также делает модульное тестирование Validate()
бризом.
Возможно также, что методы Testxxx()
зарегистрируются в суперклассе в конструкторе, поэтому они вызываются автоматически, но это более трудоемко и, вероятно, менее обслуживаемо.
Если вы действительно хотите сделать это с отражением, рассмотрите возможность пометить методы Testxxx()
с атрибутами и вместо них поразмышлять над ними. Тогда ваш код остается читабельным.