// Felix-Bang:FBMVC(中间量) //   へ     /| //  /\7    ∠_/ //  / │   / / // │ Z _,< /   /`ヽ // │     ヽ   /  〉 //  Y     `  /  / // イ● 、 ●  ⊂⊃〈  / // ()  へ    | \〈 //  >ー 、_  ィ  │ // //  / へ   / ノ<| \\ //  ヽ_ノ  (_/  │// //  7       |/ //  >―r ̄ ̄`ー―_ // Describe:MVC的中间类,用于储存M、V、C,分发事件 // Createtime:2018/9/19 using System; using System.Collections.Generic; namespace FBFramework { public static class FBMVC { //用字典存储MVC public static Dictionary Models = new Dictionary(); //名字---模型 public static Dictionary Views = new Dictionary(); //名字---视图 public static Dictionary CommandMap = new Dictionary(); //事件---控制器类型 #region 注册功能 /// /// 注册Model /// /// Model实例 public static void RegisterModel(FBModel model) { Models[model.Name] = model; } /// /// 注册View /// /// View实例 public static void RegisterView(FBView view) { //防止重复 if (Views.ContainsKey(view.name)) Views.Remove(view.name); view.RegisterEvents(); Views[view.name] = view; } /// /// 注册控制器 /// /// 事件名称 /// 控制器类型 public static void RegisterController(string eventName,Type controllerType) { CommandMap[eventName] = controllerType; } #endregion #region 检索功能 public static T GetModel() where T:FBModel { foreach (FBModel m in Models.Values) { if (m is T) return m as T; } return null; } public static T GetView() where T : FBView { foreach (FBView v in Views.Values) { if (v is T) return v as T; } return null; } #endregion /// /// 发送事件 /// /// 事件名称 /// 携带信息(可空) public static void SendEvent(string eventName, object data = null) { //控制器一般对变化有逻辑性的处理,然后返回一个处理结果; //View仅随变化实现相应的显示, //因此要先对控制器响应,再View //控制器响应 if (CommandMap.ContainsKey(eventName)) { Type t = CommandMap[eventName]; FBController c = Activator.CreateInstance(t) as FBController; c.Execute(data); } //视图响应 foreach (FBView v in Views.Values) { if (v.EventLists.Contains(eventName)) v.HandleEvent(eventName, data); } } } }