CMS系统模版引擎设计(1):基础类型
来源:互联网 发布:钢铁侠 蝙蝠侠 知乎 编辑:程序博客网 时间:2024/05/23 01:42
/// <summary> /// 模版类 /// </summary> public class Template { /// <summary> /// 模版ID /// </summary> public Guid TemplateId { get; set; } /// <summary> /// 模版名称 /// </summary> public string Name { get; set; } /// <summary> /// 模版内容 /// </summary> public string Content { get; set; } /// <summary> /// 是否为部分视图 /// </summary> public bool IsPartial { get; set; } }
初步设计就是如此,增加了一个IsPartial属性,因为我们的模版或许会作为部分视图在其他模版里调用,就像UserControl一样。
那么Page类的设计就略显复杂了。我们想访问一个Page起码要有访问路径吧,所以就要有一个UrlPattern属性,也就是访问规则,因为像详细页一般只是参数的变化,所以URL不能写死,只能是一个规则。既然有规则,也会有一些参数,而且参数不一定是?name=value形式,可能是/value/value1形式,所以我们还得设计一个UrlPattern类。
/// <summary> /// Url访问规则 /// </summary> public class UrlPattern { /// <summary> /// 具体规则 /// </summary> public string Pattern { get; set; } /// <summary> /// 正则引擎 /// </summary> public Regex Regex { get; set; } /// <summary> /// 参数列表 /// </summary> public string[] Parameters { get; set; } /// <summary> /// 获取某个参数的值 /// </summary> /// <param name="rawurl">当前访问的URL</param> /// <param name="name">参数名</param> /// <returns></returns> public string GetValue(string rawurl, string name) { throw new System.NotImplementedException(); } }
是的,你没看错,我们要用正则表达式,这可能是对制作人员难度最大的部分。:)不过可以教他们初级的写法,可以应付绝大多数需求。
比如我写一个规则如下 /details/(?<articleid>\d+),这个表明参数名为articleid,访问规则就是 “/details/数字”
Page除了访问URL外还要有缓存的概念,不然我们如何提升性能,你说是不?!缓存可能还会用标签里去,因为如果Page不缓存只是缓存了某个标签,所以Label也要有缓存,那么我们是否需要设计一个缓存类呢?
/// <summary> /// Page/Template/Label的缓存 /// </summary> public class Cache { /// <summary> /// 缓存名 /// </summary> public string Key { get; set; } /// <summary> /// 缓存秒数 /// </summary> public int CacheSeconds { get; set; } /// <summary> /// 获取缓存数据 /// </summary> /// <returns></returns> public object GetData() { throw new System.NotImplementedException(); } /// <summary> /// 移除缓存 /// </summary> public void Remove() { throw new System.NotImplementedException(); } /// <summary> /// 更新缓存 /// </summary> /// <param name="data"></param> public void SetData(object data) { throw new System.NotImplementedException(); } }
那么Page类还应该有什么?Labels!是的,我们不可能每次都去解释模版来获取所有的Label,而是Page被缓存后我们只需要访问他的LabelCollection即可。那么我们来看下Page的设计雏形吧。
/// <summary> /// Page类 /// </summary> public class Page { /// <summary> /// ID /// </summary> public Guid PageId { get; set; } /// <summary> /// 名称 /// </summary> public string Name { get; set; } /// <summary> /// 标题 /// </summary> public string Title { get; set; } /// <summary> /// 关键字 /// </summary> public string Keywords { get; set; } /// <summary> /// 描述 /// </summary> public string Description { get; set; } /// <summary> /// 模版 /// </summary> public Template Template { get; set; } /// <summary> /// 访问路径规则 /// </summary> public UrlPattern UrlPattern { get; set; } /// <summary> /// 标签 /// </summary> public Label[] Labels { get; set; } /// <summary> /// 缓存 /// </summary> public Cache Cache { get; set; } /// <summary> /// 显示HTML代码 /// </summary> public void Render() { throw new System.NotImplementedException(); } }
不错哦,袄哟,不错哦。
其实对于大型的站点,子站的概念是不可缺少的。或者我们的CMS需要支持多站点,那么还需要一个Site类。
/// <summary> /// 站点 /// </summary> public class Site { /// <summary> /// 站点ID /// </summary> public Guid SiteId { get; set; } /// <summary> /// 站点名称 /// </summary> public string Name { get; set; } /// <summary> /// 站点备注 /// </summary> public string Note { get; set; } /// <summary> /// 站点域名 /// </summary> public string[] Domains { get; set; } /// <summary> /// 站点状态 /// </summary> public Status Status { get; set; } /// <summary> /// 站点的页面 /// </summary> public Page[] Pages { get; set; } }
站点一般包含多个可访问的域名,所以有个Domains。当然站点包含N个Page。
好啦,初步的设计就到这了,下节我们讲怎么让这些类运作起来。
- CMS系统模版引擎设计(1):基础类型
- CMS系统模版引擎设计(1):基础类型
- CMS系统模版引擎设计(2):页面生产流程
- CMS系统模版引擎设计(3):Label基类的设计
- CMS模版引擎介绍
- CMS系统模板引擎设计(4):Parameter类设计
- CMS系统模板引擎设计(5):Label应用初探
- CMS系统模板引擎设计(6):Field的类的设计
- T4模版引擎之基础入门
- T4模版引擎之基础入门
- (转载)[ZT]内容管理系统(CMS)的设计和选型
- 面向搜索引擎的内容管理系统(CMS)设计
- 面向搜索引擎的内容管理系统(CMS)设计
- [FreeMarker 2.3.20] Part I 关于模版设计的介绍 ~值和类型~ 基础概念
- .net开源cms系统汇总(1)
- CMS(内容管理系统)
- 内容管理系统(CMS)
- cms系统(内容管理系统)
- 常用网址
- ASP.NET进阶(7):认清控件之DataBind
- http状态码
- ASP.NET进阶(8):HttpModule和HttpApplication
- gettracename.sql
- CMS系统模版引擎设计(1):基础类型
- JavaScript的数据类型之Number, String, Boolean和Object
- CMS系统模版引擎设计(2):页面生产流程
- POJ 3348 Cows (计算凸包面积)
- CMS系统模版引擎设计(3):Label基类的设计
- CMS系统模板引擎设计(4):Parameter类设计
- 新博客测试
- Struts2 + Spring 整合
- CMS系统模板引擎设计(5):Label应用初探