Как перенести поведение в отдельные классы

1

Я новичок в Design Patterns, и я изо всех сил пытался понять, как я могу применить шаблоны Strategy, Decorator или Visitor к моей проблеме.

У меня есть диалог MVVM WPF, который используется для захвата информации документа Letter. Форма имеет следующее:

  • группа получателей
  • Отправитель 1 Контакт
  • Отправитель 2 Контакт
  • группа CC Контакты
  • группа контактов BCC

Я использовал 3 элемента управления пользователя для вышеперечисленных элементов, потому что для каждой записи фиксируется немного другая информация:

  • Получатели
  • отправитель
  • CCs (используемые BCC)

У меня есть один класс Contact, и каждая ViewModel захватывает немного другую информацию. Там, где он отличается, Recipients/CC имеют поведение "Несколько контактов", а Sender/CC имеют поведение "Favorite Contact".

В настоящее время моя логика дублируется, и я стараюсь сделать ее более удобной.

Когда я рассматривал шаблоны Strategy and Decorator, суперкласс содержал информацию о каждом поведении. Можно ли просто "добавить" поведение в конкретную реализацию, не добавляя суперкласс?

Теги:
wpf
design-patterns
mvvm

1 ответ

0

Вы можете "добавить" поведение к конкретному типу без наследования с использованием extension methods, в зависимости от того, какой тип функциональности вам нужно добавить.

Например, скажем, у вас есть класс под названием MyConcreteClass:

public class MyConcreteClass
{
   public string PropertyOne { get; set; }
   public void MethodOne { ... }
}

Затем вы можете создать отдельный класс расширений, который позволяет добавлять функциональные возможности без изменения исходной реализации.

namespace Extensions
{
    public static class MyConcreteClassExtensions
    {
        public static string MethodTwo(this MyConcreteClass concreteClass)
        {
               // add new implementation here
               return concreteClass.PropertyOne + " using extensions";
        }
    }
}

И тогда вы можете просто использовать следующее:

var c = new MyConcreteClass();
Console.WriteLine(c.MethodTwo());

Для получения дополнительной информации см. Здесь

  • 0
    К сожалению, я не думаю, что могу использовать метод расширения, потому что поведение слишком сложное. например. Поведение «Избранное» представляет 1) коллекцию избранных контактов 2) дополнительные команды для «AddFavorite» и «RemoveFavorite» и 3) изменяет пару существующих команд, таких как «ClearContact»

Ещё вопросы

Сообщество Overcoder
Наверх
Меню