用页面模板引擎生成站点的一些观点
最近新公司的工作主要是做静态页面,写策划。还有就是学习CommunityServer项目。加起来做这些已经一个月了。周六去了上地七街一家公司。和人家谈了谈,发现这个模板类已经放了好长时间了。回来后觉得应该补上模板类一直需要的一个功能了。就是支持信息载体类。就是说在自定义的标签解析函数内,我门可以获取外界传近来的自己定义的各种各样的信息载体类内的数据。加上信息载体类后,用模板类,也可以说用模板引擎来开发页面才更有实用意义。
在用简易模板引擎开发的哪个blog项目中(www.93913.com)。应为标签分析接口是可以随意扩展的。所以可以很自然的把各种各样的信息载体类传到模板引擎内。但是在这个模板类中,底层类已经固定了。原先是为了减少对象的资源消耗。不得不把所有类做成sealed class 。加上当时基本不考虑使用减少效率的强制类型转换。这样就为实现这个功能设置了一个很难通过的技术点。昨天晚上我对原来的结构做了一次大修改。把底层类改为抽象类。使用了一点强制类型转化。修改了委托对象的缓存。这样就解决了在标签解析函数内直接引用外界信息载体类的问题。
先说一下用模板引擎开发的想法,也许还有很多错误,拿出来大家批批。
在看见一个页面的时候。我门把里面的页面布局和动态部分切出来。放到一个文件内,这个文件就是我门的模板文件了。在把文件内的动态部分切出来。把动态部分的位置上先放上一个标签(什么是标签,总么使用,去我的blog上 vitality2007.cnblogs.com 看)。在标签解析类内在加上一个和标签对应的标签解析函数。
这样我门可以说是暂时实现了页面布局和页面功能的分离。布局由模板文件内的html代码决定。功能由模板文件内的标签决定。(当然标签解析后输出的不可能是完全的数据。这个其实可以做到。但是会产生过多的标签,一般不采用。标签转换后输出的大部分是数据和html的混合字符串。我门可以把样式,参数当作标签参数传进去来控制标签解析输出部分的布局和内容了)
功能独立了发现了一个问题。他和页面的联系程度减少了。数据信息必须要通过模板类的属性才可以传到标签解析函数内。为了减少属性的数量和灵活性。很自然的写出了一种大量的类。他们有很多的属性,类对象就是为了保留数据而生成的。这样的类对象,我就把他叫做信息载体类。
现在流程就很清晰了。页面的布局已经提取出来放到了模板文件内了。页面的功能已经全部提取出来并写好对应的函数放在了逻辑层的标签解析类内了。
1 我门先在UI层的页面上获取到我门想要的一切参数。通过逻辑层传到了数据层。
2 数据层产生了对应请求的信息载体类对象。里面包含什么信息你自己定义,一般
写成sealed class ,并实现垃圾回收接口。方便析构。
3 信息载体类传到了逻辑层,并和模板文件路径信息一起传到了模板引擎内。
4 在标签解析函数上,通过获取信息载体类的数据,和传近来的其他数据。实现身份判断了,数据处理了。显示排版了,所有的逻辑处理全在这实现。
5 标签解析的数据在返回模板引擎内和模板文件合并。合并的数据在传到UI层在页面上显示出来。
对应的ajax处理过程也差不多。这样一个站点的所有页面全部是由模板引擎来生成的。布局 功能 数据 三方面实现了一定的分离。并且多使用缓存。尽量提升速度。站点维护 修改的时候方便一些。
将会有小于0.5%的概率在生成页面上显示一些模板引擎的来源信息,但信息只能显示在非loop循环外的第一个自定义解析标签后。信息表示格式如下。在代码中以写死。
"<span style='display:none;width:0px;height:0px;'><a href='http://vitality2007.cnblogs.com' title='asp.net开发模板引擎' >asp.net开发模板引擎</a></span>"
加起来模板引擎来源信息的显示不会超过0.25%
例子没有时间新做。我只做了最简单的例子,这次也只做了必要的修改。建立一个名叫TemplateWeb的虚拟目录就可以了。
以后有时间我会新做一个示例的。
下载地址 /Files/vitality2007/TemplateWeb.rar