2005年11月6日星期日

TextGem v2 - 基于类似Sharepoint技术的CMS

TextGem在开发的时候,本来仅仅考虑用来做wiki。wiki做完了,我就开始考虑把它用于blog和forum??因为大家的ContentData格式都是一致的,不过UI不同,于是TextGem Pro出现。TextGemPro中应用了很多新奇好玩的构思,例如实现了HTML编辑器,添加了支持RollBack的Config,支持Key的映射……虽然都是没什么用的东西,而且把TextGemPro变成四不像,不过挺好玩。可惜它现在实在是太过四不像啦,所以我就算要把它重新做成单一目标的产品,也不知道"单一目标"定为什么好。

然后,最近遇到了一些问题,就是我见到好像TLF或者一些其他论坛,通过规定一些发帖规范把某些板块的帖子格式限制到符合一个标准,然后就可以自己写一些小软件来分析数据库,按照帖子格式来进行数据分析,作统计工作量等的一些工作。我在想,其实很多论坛,它有特色就在仅仅在于它的数据表多了一两个字段和多了一些相关的数据逻辑,仅此而已,我希望提供一种论坛能够轻松的自定义增加的数据字段和自定义逻辑。

开头的时候,我在做有关ASP.NET的事情,所以我的设计思路是很OO的,也是完全面对开发者的。那时候考虑的是,例如好像CSDN那样的记分系统,完全就是可以当作一个插件来看。首先要严格定义一个IBoardExtension的接口,类似ASP.NET有一个OnInit->OnLoad->OnPrerender->OnRender这样的一个过程,IBoardExtension应该支持一系列的事件,例如OnPreinstall和OnInstaller将在论坛发现新的IBoardExtension时调用而让这个插件有机会去检查是否已存在低版本需要删除、是否需要建立/升级此插件需要的数据表;然后OnThreadListPageRender、OnThreadPageRender等事件则在呈现对应页面时发生,插件此时就有机会去读取Threads、Posts等有关对象然后在Page上做有关的改动;OnNewThreadPageRender将在呈现"发新贴"页面调用,如果插件需要用户填写"点数"这项属性可以在此时操作Page,而OnNewThreadPagePostBack则是用户提交了"发新贴"页面,此时Extension要检查数据是否合法,以及是否对数据库做什么读写操作等。

现在发觉,当时的想法把页面限死了,因为所有IBoardExtension有关的事件,都是和某一个页面某一个事件绑死在一起的,如果仅仅是考虑论坛和插件的功能,那已经相当足够,因为一个论坛的页面大概也就那么多,无非是主题列表、主题里面的贴子/回复列表、发新主题、发新贴等等,UI的大体是固定的,仅仅是Extension在这上面能够对Render和PostBack做一定的操作。但是如果要支持wiki和blog这些和forum拥有类似数据表结构的东西就不行了,这需要一个更加flexible的设计。

这个更加flexible的设计,就是学习Sharepoint引入WebPart的概念??一个WebPart自身就包括显示部分与逻辑部分。实际上,我非常认同一个拥有良好flexibility的东西,必须遵守MVC分离的设计,至于它是否使用某个设计模式那倒不重要。应用MVC分离,这意味着每一个WebPart本身都要拥有MVC三者,而且这三者之间要松耦合然后他们都去和系统自身的MVC耦合。也就是说,IBoardExtension那样完全不区分MVC的提供一队事件是不行的,必须提供一种更加好的方式,让Extension继承/支持某个东西,然后就可以分别对MVC三个部分扩展编程。

详细的TextGem v2设计还在思考中,不过这并没有脱离原来的TextGem.NET开发三部曲路线??首先制作核心,然后制作应用,最后提供用于制作应用的开发工具。TextGemv2首先要做的核心,它不会像制作一般论坛那样,受到表情符号、用户头像等一系列琐碎麻烦问题的困扰,因为这一切都属于应用而不属于核心,但核心的设计就是要兼容这一切将来可能要添加的应用,所以需要花比较长的时间去做设计。

没有评论:

发表评论