Это на самом деле не шаблон проектирования, а действительно понимание вызовов виртуальных методов. Допустим, у меня есть кое-что:
public abstract class Foo
{
protected void DoFoo()
{
DoFooInternal();
}
protected abstract void DoFooInternal();
}
И у меня есть производный класс:
public class Bar : Foo
{
protected override void DoFooInternal()
{
// Something here
}
}
В приведенном выше примере любой вызов DoFoo
в базовом классе делает виртуальный вызов метода DoFooInternal
производного класса. Я также мог бы определить мой DoFooInternal
как виртуальный, если бы я хотел предоставить базовую реализацию:
protected virtual void DoFooInternal()
{
// Baseline implementation here
}
В случае ваших контроллеров это будет то же самое, вы можете указать некоторую общую разделяемую логику в экземпляре ControllerBase
и получить дочерний контроллер, например PeopleController
, который может отправлять вызовы методов в базовый класс, который, в свою очередь, может отправлять вызовы виртуальных методов в производном классе ...