分享一个UI与业务逻辑分层的框架(三)

序言

前两篇讲解了UIMediator框架的使用及具体原理代码。本篇讲述MediatorManager的实现代码及展望。

MediatorManager

MediatorManager的作用有两点:

一是解除前端对Mediator子类的依赖,所有前端只需与MediatorManager交互,不需知道Mediator子类;

二是通过MediatorManager可以实现其他前端控件的扩展。

以下为MediatorManager实现代码(笔者在写作本文时,将Bind<T>更改为静态函数)

public class MediatorManager
    {

       private static List<Mediator> Mediators = new List<Mediator>();
       public static void Bind<T>(Control control, T BindInstance, string BindProperty) where T : class,IPropertyChange
       {
           Mediator mediator;
           Type type = Type.GetType(MethodBase.GetCurrentMethod().DeclaringType.Namespace + "." + control.GetType().Name + "Mediator");
           object obj = Activator.CreateInstance(type);
           if (obj != null)
           {
               mediator = (Mediator)obj;
               mediator.Bind(control, BindInstance, BindProperty);
               Mediators.Add(mediator);
           }

       }
    }

请注意上述代码中

Type type = Type.GetType(MethodBase.GetCurrentMethod().DeclaringType.Namespace + "." + control.GetType().Name + "Mediator");

此段代码实现了其他前端控件的扩展性。

后续如果需要扩展其他前端控件时,只需将该控件Mediator子类的命名空间编写成与UIMediator命名空间一致,类名为前端控件类名+Mediator即可。

示例如下:假设其他前端控件类的类名为CustomControl,UIMediator命名空间为UIMediator。

namespace UIMediator
{
    public class CustomControlMediator : Mediator
    {
        ......
    }
}

MediatorManager展望

之所以把MediatorManager单独作为一篇来写,是因为MediatorManager上可做的“手脚”太多了。展望MediatorManager,还有以下扩展可以做:

1、采用配置化(XML)的形式,可更加灵活地增加其他前端控件Mediator子类。

2、现有UI与后台属性的绑定是通过在UI程序中硬编码实现的,灵活性差。

如果采用配置+依赖注入的方式可实现更为灵活的UI与后台业务逻辑分离。

 

附上DEMO,欢迎大家拍砖讨论。

UIMediatorDemo

posted @ 2016-09-22 11:16  蜡笔小黄  阅读(1522)  评论(3编辑  收藏  举报