常常看到或听到有人讨论控件开发方式好还是MVC开发方式好的问题,在此我就不参和这个话题了,不过在文中为了展现MVC方式的特点,可能会有些内容会与控件的方式进行比较,但这只是为了展示某一个小方面的特性而已,并不是说谁就比谁好。
采用MVC开发方式的最初以及最主要的目的,那就是让表现与数据进行分离。目前比较成熟的MVC框架都基本上能达到这样子的目标,而我个人比较偏爱promesh这样的小型的MVC框架,但它起初的版本的模板语法和其对表达式的解析方式却让我很不爽,所以我在它的基础上进行改造实现了一个自已的MVC,不过新版的promesh好像在这方面进行了比较大的改进。
所谓的MVC就是Model、View、Controller。Model就是我们所常用的实体类,主要是用来作数据传递的;View从字面上看我们也知道它是用来显示的;而Controller就是我们用来取数据的地方,或者说是给View设置数据的地方。在目前的WEB开发中,我们并不能实现真正意义上的MVC模式;Model数据的变化无法主动去通知View,即使应用了AJAX。
使用过MVC方式进行开发的人应该对ViewData["any"]这样的一个对象或者说是属性应该是比较的熟悉了吧。我们一般都是通过ViewData["any"] = "anything"这样的形式从控制类给模板设置数据的,这样在模板里就可以使用这些变量,并且根据需要进行数据的展示。当然,有一些框架支持直接在模板里主动去取数据的,这样看起来会更方便了,但我不提倡这种形式。对于那种在模板里指定要取哪些类别里的数据和相关的一些条件限制的需求,我比较喜欢使用一种自己叫它自定义控件(不是ASP.NET所说的自定义控件)的一种方式,具体形式如下:
而在模板中的调用为:
<% $$.RenderControl("Menu", "Menu", 3);%>
</div>
说明:第一个参数Menu为控件名,第二个参数Menu为控件的皮肤文件,后面的所有参数为传给控件Menu的参数。
这样的实现方式实现了和在模板里直接调用数据的效果,但仍然比较严格的尊守了WEB的MVC模式。
(未完...)