序言
前兩篇講解了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,歡迎大家拍磚討論。