分享一个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,欢迎大家拍砖讨论。