定义:在CSK架构中,由系统定义了四种标准的模型,分别包括增加、编辑、列表、项目。增加模型组件所完成的工作就是,当你需要在诸如文章系统、链接系统等,中添加一条记录时所用到的添加功能,其它模型组件与这个定义类似,可以依此类推。
我们依据CSK的系统架构说明书,以增加模型组件为切入点,来研究一下CSK的具体结构。再作一个背景问题假设,我们需要一个类似工作列表的应用,像工作列表、工作编辑、工作增加、工作在指定的皮肤中的显示等功能.
CSK系统使用的是典型的页面代码分离模式,也就是微软所说的代码后置模式,更简单地说,它的页面部分和代码部分是完全分开的。也就是说在工作列表页面中所用到的所有控件定义和功能都在其后台代码中完成,这样做的目的就可以使页面美工人员和后台代码人员同时完成一项工作,增加工作效率。
要完全工作增加部分的模型组件,需要做以下的工作:
1、后台部分
a.完成组件或工具类,它的目录在 engine/modules/XXXXX/Components/,在这里你要定义你所研究的问题的一个实体类,比如这里的JobModule,就必须定义一个JobInfo类,里面含有数据库里所有Job的字段信息,把它写到类里,作为这个组件的属性即可,可参考其它Module的写法来完成这个实体类。这里,还需要一个工具类来把一些常用的功能都写在这里,提高代码的复用效率。比如,像Job的添加,Job的编辑,取得Job的具体属性等功能,以供在模型中提供给其它组件使用。
b.完成相关页面的后台代码,它的目录在 engine/modules/XXXXX/Content/。我们可能有很多的前台页面,在CSK中,所谓前台页面不过都是些通用的皮肤文件,每一个皮肤文件使用时都需要有一个后台代码来支持。比如Job的主显示页面、Job的添加页面、Job的编辑页面等,这些页面的后台代码都应该在这个目录里完成,相应的文件名就是类似AddJob.cs、EditJob.cs等形式。它们都是继承自CSK的基础类的,一种可能的情况就是AddJob是继承自ContentAddPage类,而EditJob类是继承自ContentEditPage类,这些基础类都在engine/framework/BassClasses/下。
至于为什么从基础类继承,可以换个角度来问,从基础类继承有什么好处?这是个非常值得我们研究的问题。理论上讲,我们完全可以一个皮肤对应一个后台代码。可是经过长期的实践发现,其实很多代码都是在“重复昨天的故事”,像往数据库里添加一条记录的功能页面,写来写去都是在定义一堆的按钮和TextBox(添加,取消,预览,标题,内容等),要想提高代码复用率,自然而然的就可以想到把一些标准的按钮、TextBox写进一个基础类,比如CSK中的ContentAddPage这个增加功能的父类就定义了我们在需要添加记录时常用的一些控件,当我们要定义一个特定功能的添加页面时,就可以直接从ContentAddPage类继承,只需在特定类中定义特定的控件即可。由此,也不难看出微软的工程师为我们开发员想得多么周到(绝对没有为微软打广告的意思噢:-)
c.那么还有一个 engine/modules/XXXXX/Controls目录是干什么的呢,顾名就可以思意了,它里面放的是一些个自己定义的控件类,比如我们可以重新定义一个TextBox,扩展成JobBodyText类来完成一些特定的任务,供皮肤的后台代码使用,这也符合面向对象的“开闭原则”(Open-Close priceple)。具体内容可以自己参考CSK的源代码研究。
2、前台部分
前台部分相对比较简单,只要有一点制作网页的功底的人都可以看懂。无非都是些控件的摆放位置,CSS样式表的定义等简单内容,只要参考一下CSK的源代码,很容易就可以掌握方法。