Шаблон проектирования для связи от родителя к его производным классам - PullRequest
2 голосов
/ 29 июня 2011

Я дополнительно сказал, производные классы, а не дочерние классы.

У меня есть базовый класс и много производных классов.Один производный класс должен вызывать метод базового класса, который снова вызывает метод для каждого производного класса.

Как это возможно?Какой шаблон проектирования я должен использовать для реализации канала связи

между моими контроллерами, управляющими пользовательским интерфейсом с использованием шаблона проектирования MVVM?Я знаю шаблон медиатора

, но мне он не очень нравится, поскольку он стирает границы архитектуры.

Ответы [ 4 ]

2 голосов
/ 29 июня 2011

Это на самом деле не шаблон проектирования, а действительно понимание вызовов виртуальных методов. Допустим, у меня есть кое-что:

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, который может отправлять вызовы методов в базовый класс, который, в свою очередь, может отправлять вызовы виртуальных методов в производном классе ...

1 голос
/ 29 июня 2011

Для "делегирования" ответственности от суперкласса его подклассу (ам) вы, возможно, искали Pattern Template Pattern .

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

0 голосов
/ 30 июня 2011

Вы можете использовать События для связи между моделями представления.ИЛИ

Шаблон медиатора MVVM

0 голосов
/ 29 июня 2011

Я думаю, что Command Pattern лучше всего подходит для вашей проблемы. Если ваш сценарий таков:

  • У вас есть базовый класс, который выполняет метод (команду) во всех производных классах (клиентах)
  • Один из производных классов вызывает это выполнение (invoker)

тогда лучшим шаблоном является Command Pattern.

Эта статья может дать вам некоторое представление

Но я предлагаю использовать интерфейсы вместо базовых классов.

...