浅谈HMVC模式续----例子讲解

 

HMVC模式例子

功能实现:此应用程序实现Window Form下的模板定制,通过设计时环境定制好模板,将模板信息保存到数据库,便于以后进行模板和内容输出。本篇关注的是HMVC模式在此应用程序中的应用,具体的业务逻辑不属于本篇范围。

最后实现的应用程序的界面如下图:


 

描述:此界面很类似VS.NET环境,是仿VS.NET,提取它的部分功能,并扩展而完成。

模块划分:应用程序模块主要有:菜单、工具箱、主工作区、模板树、数据源树、属性窗格。根据功能模块分别实现不同的MVC结构。

HMVC设计:权衡此程序的复杂程度,采用2HMVC结构。父MVC即框架MVC,它对应整个应用程序框架。子MVC分别有菜单MVC、工具箱MVC、主工作区MVC、模板树MVC、数据源树MVC、属性窗格MVC

注:不要机械化的实现每一个MVC,MVC中的C(Controlller)是必须的,M(Model)和V(View)是可选的。如果一个MVC模块没有界面显示,不需要View;如果模块没有业务逻辑,也不需要M(在本例子中,工具箱就不需要M,它只负责显示)。

代码片断:

首先定义接口GuiModel

public interface GuiModel
{
   
void Init();

   
void SetView(View.GuiView view);

   
void HandleAppEvent(AppEvent ae);

   View.GuiView GetView();
}

再定义接口GuiView:

public interface GuiView
{
   Void BuildDisplay();

   
void SetController(GuiController con);

   
object GetController();

   
void SetModel(GuiModel model);

   
void Init();

   
void HandleAppEvent(AppEvent ae);  
}
控制器(MVC中的整个模式的核心)的实现:

首先实现一个控制器基类GuiController:

abstract public class GuiController
{
   
protected GuiModel m_model;

   
protected GuiView m_view;

   
public GuiController() 
   {
   } 

   
public GuiController(GuiModel model , GuiView view) 
   {
       m_model 
= model;
       m_view 
= view;
   }

   
virtual public void Init()
   {
   }

   
virtual public void SetChildController(GuiController child)
   {
   }

   
virtual public void SetParentController(GuiController parent)
   {
   }

   
virtual public GuiController GetParentController()
   {
       
return null;
   }

   
virtual public void HandleAppEvent(AppEvent appevent)
   {
   }
}

        父控制器—FrameController,子控制器菜单MenuController、工具箱ToolBoxController、主工作区WorkBenchController、模板树TemplateTreeController、数据源树DataSourceTreeController、属性窗格PropertyController 都继承自GuiController。它们分别实现Init(初始化操作),SetChildController(设置子控制器的关联关系),SetParentController(设置父控制器关联关系)GetParentController(得到父控制器的关联关系)和HandleAppEvent(处理事件)。

        父控制器FrameController的实现中,在初始化过程中(Init)你需要至少做三件事。第一设置FrameController和其他子控制器的父子关系(通过SetChildControllerSetParentController等方法);第二调用子控制器的初始化;第三设置FrameControllerFrameModelFrameView的关联关系。而HandlerAppEvent则处理控制器之间的事件流转。

        其他子控制器的初始化实现中,只需要设置自己的MVC结构的Model,ViewController的关联关系。

ModelView的实现:

        所有MVC结构的ModelView分别继承GuiModelGuiView接口。Model关键要实现HandlerAppEvent,View关键是实现BuildDisplay(显示界面)HandlerAppEvent

        举个主工作区的MVC例子:WorkBenchModel处理的事件主要有:保存定制好的模板(数据库操作)、复制或粘贴模板(剪贴板和内存中存储控件操作)等。而WorkBenchView主要是显示界面,也许也会有一些事件处理的操作。

        这样,整个HMVC结构就生成了。由于编码和写作水平有限,可能里面有很多没讲清楚的地方,请大家指出来一起讨论。

posted on 2005-11-01 16:18  hgtj  阅读(1840)  评论(3编辑  收藏  举报

导航