浏览 5110 次
锁定老帖子 主题:一个cms系统的想法
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-12-12
首先说我对一个cms系统的理解: 我理解一个最简单的cms系统应该实现的功能就是文档的录入,维护和展示。 当然只有这点是不够的,我们还有更多,比如用户系统,评论系统,广告系统,工作流,版本控制,抓取等等。不过我想那些都可以作为后续的迭代慢慢考虑起来,今天我主要是想跟大家说说最基础的部分。 我面临的问题: 本来一个文档的录入,维护和展示其实就是个增删改查,顶多在加上一个分类,但是实际情况可能要复杂一点。 首先,系统需要能支持不同类型的文档,比如在一个网站应用中,我们可能需要维护产品,商品,公司,新闻等等,这些都可以称作文档,如果给每一种文档建立一个表的话,很是麻烦。 第二:文档在不同的情况下需要有不同的属性,比如公司和新闻,他们的字段肯定是不相同的吧,那不同分类的公司呢,比如饭店和商场,描述他们的属性肯定也是不同的。 第三:文档和文档之间是存在关联的,比如:公司下面有很多的产品,之类的关系,其实这种关系也可以看作一种属性:我们可以这样理解,公司这个对象有一个属性,叫作“我的产品”这个属性的值是一个对象数组。 所以,其实我们看到,从面向对象的角度上来考虑,我们存储的就是一系列的文档对象,每个对象或者说每一种对象都有自己的属性,这些属性可以是:简介,名称,作者,发布时间,甚至可以是:图片,图组,对象数组等等等等。 我的设计思路: 基于以上的灵感,我想我们可不可以设计一套这样的系统,这个系统当中可以自定义对象类型和对象的属性,其实就相当于java当中的Class,只不过这个Class是放在系统后台设计的。 用户设计好了Class以后,我们就可以根据Class的定义动态的生成一个有关这个Class的录入,维护的表单供用户路如何维护文档对象。 至于查询,想象一下hibernate的那种查询方式,举例来说,我想查询一下所有的作者是刘祥的文章,这可能比数据库查询的方式要复杂一些,但是应该也是可以实现的。 底层的数据结构: 关于底层的数据结构,我想当然还是需要支持数据库的,那么数据库怎么实现这样的一个结构呢? 我是这样想的: 一个Class表,一个Object表,一个Property表和一个PropertyValue表 Class表表达了类的定义,它里面有一个类名,当然Class表本身是自关联的树型结构(继承,呵呵) Object表和Class表是多对一的关系,每一个对象都有一个类型,这个类型是类树下面的一个子节点。 Property表是属性的定义,比如名称,它和Object表之间通过PropertyValue表,也就是属性的取值关联,也就是说,一个对象在某一个属性上可能有一个值。 当然PropertyValue必须能实现多值(对象数组的情况) 另外Property表和Class表也是有关系的(类决定了应该有哪些属性)而且这种关系应该能实现继承,我的意思是,如果父类有的属性,自类自动继承。 这样的话,根据Property和Class之间的关系,我就可以动态生成录入表单了! 前台页面的展示: 前台页面的展示我们还是假设最基本的需求:列表页面和终端页面 先说终端页面,终端页面就是一个对象的完全展示页面,我是这样想的,如果我们能实现一个api,从对象中取出相应的属性,就好像company.getName那么简单的话,其实终端页面的制作就应该像填表一样的简单。 列表页面,列表页面接受复杂的查询条件,比如,我要查所有的上海的,有打折的,卖乔丹牌衣服的商店 其实,在这种情况下,所有复杂的查询都归结为两种条件:类型和属性,在上面的例子里面,商店是类型,其他的条件都是属性,我想如果靠sql查出这些东西的话,应该也不是难事,sql的例子我就不列举了,还有一个好处就是,整个发布平台上的90%的查询我应该可以通过这一个接口完成。 用户体验: 这样一套系统,你可能会这样使用他: 1、初始化系统,建立类树 2、在类树上面建立属性,完成了这两步,就相当于我们的类图做出来了! 3、录入文档对象,系统会根据类设计的结果,动态生成表单,供用户录入 4、制作前台页面模板,把你想显示的信息像填表一样的添进去就可以了(这一不做得好的话,应该可以让非技术人员完成) 其它问题: 1、工作流:工作流传递的就是对象,所以和工作流系统应该可以对接 2、版本:这样的一套系统的版本其实是非常容易控制的,因为每个属性都是单独存放的,所以两个版本之间我甚至可以比较出作了那些更改 3、性能:性能我一直是习惯最后考虑的东西,不过这个东西比较复杂,性能肯定没有传统的模式好,但我们也有我们的优点,那就是重用度高,在重用度高,接口高度统一的情况下,我想一些缓存的方案是比较容易集成的! 我希望能把这套系统做起来,单纯是因为兴趣问题,如果有可能的话,不断完善,把它搞到一个开源的project也不错!希望大家多提宝贵意见。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-12-12
有一点刚刚想到的,补充一下,Property也应该有一个Class的字段,因为一个属性也有它的类型嘛。
可以先弄几个基本类型放在系统当中,比如字符串啊,文本域拉,图片,附件什么的,也可以让一个属性属于某一个系统元数据中的Class,还可以是List<Class>这种形式。 |
|
返回顶楼 | |
发表时间:2007-12-12
不错的想法!
我看过一些其他的cms,也有你说的这种实现方法。整个设计当中,最不容易控制的就是查询,保证查询的准确性和效率是一个问题。 |
|
返回顶楼 | |
发表时间:2007-12-12
用JAVA做CMS系统是不是成本高了点!给别人订做差不多!不过分析还是不错的!
|
|
返回顶楼 | |
发表时间:2008-01-09
有人用grails开始实现类似wiki的东东,你可以参考一下
http://gatewiki.sourceforge.net/ |
|
返回顶楼 | |
发表时间:2008-12-07
正开始写CMS
|
|
返回顶楼 | |