分享一個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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM