MVC,十年的经典。可是如何体味到MVC的真正内涵并付诸实践。对于经验尚浅的我们来说,还是一个新课题。
做过J2EE的朋友对MVC都是耳熟能详的,Struts,Turbine都是现成的模式。
而这次我们需要实现的是在.net C#的开发环境下面,利用自己构筑MVC的Framework,开发Windows Application。
先来看看什么是MVC。
MVC是” Model-View-Controller”。的缩写。
简而言之,就是把画面和逻辑分别封装,利用Controller来进行交互的一种实现方法。
在传统的一些框架中,每个层面会有一些固定的Design Patten来做。
“Views可以看作一棵树,显然可以用Composite Pattern来实现。Views和Models之间的关系可以用Observer Pattern体现。Controller控制Views的显示,可以用Strategy Pattern实现。Model通常是一个调停者,可采用Mediator Pattern来实现。”
但是,我们是完全在一个全新的基础上自己进行Framework的构筑,所以,采取了比较不一样的设计思想。
首先,我们根据产品的需求,首先制定出NameSpace和Assblem的命名规则。
NameSpace:
Company.Sh.Option.Windows.OptionName
Assblem按照MVC分为:
Company.Sh.Option.Windows.Logic.OptionName.FunctionName
Company.Sh.Option.Windows.View.OptionName.FunctionName
Company.Sh.Option.Windows.Controller.OptionName.FunctionName
其次,定义MVC构架Framework中的接口和框架,编写Framework的代码,
对Framework的各部分进行Unit测试,写出Sample程序.
最后,在实际应用中使用MVC构架的Framework.
然而,Framework的代码也是几经波折才得以最终定版。
现在造成的恶果就是目前开发中使用了不同版本的Framework,无法统一起来。
不管其他的因素,先来简述一下FrameWork的核心构成。
在FramWork里面,我们定义了三个主体Class: FormViewBase, DataModelBase 和AbstractController。
从名称上就可以看到,Controller 为abstract Class。
另外定义了三个相应的Interface: IDataModel,IFormView, 和IController
在Controller Class里面,封装SetModelEventMapping和SetViewEventMapping来进行View和Model的数据交换。
从实现方法上来说,在FrameWork中使用Delegate定义Event,启动
Pressed/Changed Event
来实现参数的传递。并且
定义ObcParameter来指定参数的传递方法。
其中由IParameter来定义各种序列的参数类型以便进行定向的传递。
另外,对于底层的一些共通的功能,比如ErrorLog,Exception等等的Class也放在Framework中进行定义。
至此,一个基本的MVC构架的FrameWork完成了。