如何将行为移动到单独的类中

时间:2014-05-21 06:19:37

标签: c# wpf design-patterns mvvm

我是Design Patterns的新手,我一直在努力研究如何在我的问题中应用策略,装饰器或访客模式。

我有一个WPF MVVM对话框,用于捕获Letter文档信息。 表格如下:

  • 一组收件人联系人
  • 发件人1联系
  • a Sender 2 Contact
  • 一组CC联系人
  • 一组BCC联系人

我为上面的项目使用了3个用户控件,因为每个项目捕获的信息略有不同:

  • 收件人
  • 汇款人
  • CC(由BCC使用)

我有一个Contact类,每个ViewModel捕获的信息略有不同。不同之处在于收件人/ CC具有“多个联系人”行为,而发件人/ CC具有“收藏联系人”行为。

目前我的逻辑是重复的,我试图让它更易于维护。

当我查看Strategy和Decorator模式时,超类包含有关每个行为的信息。是否可以在不添加超类的情况下将“添加”行为添加到具体实现中?

1 个答案:

答案 0 :(得分: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());

有关详细信息,请参阅here