论坛首页 Java企业应用论坛

一个cms系统的想法

浏览 5111 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-12-12  
最近突然有这样一种冲动,想要开发一套cms系统,可能是因为网站作的多了,有很多问题想清楚了以后却没有机会去解决了。这里说说我的想法,大家给提提意见。

首先说我对一个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也不错!希望大家多提宝贵意见。
   发表时间:2007-12-12  
有一点刚刚想到的,补充一下,Property也应该有一个Class的字段,因为一个属性也有它的类型嘛。
可以先弄几个基本类型放在系统当中,比如字符串啊,文本域拉,图片,附件什么的,也可以让一个属性属于某一个系统元数据中的Class,还可以是List<Class>这种形式。
0 请登录后投票
   发表时间:2007-12-12  
不错的想法!
我看过一些其他的cms,也有你说的这种实现方法。整个设计当中,最不容易控制的就是查询,保证查询的准确性和效率是一个问题。
0 请登录后投票
   发表时间:2007-12-12  
用JAVA做CMS系统是不是成本高了点!给别人订做差不多!不过分析还是不错的!
0 请登录后投票
   发表时间:2008-01-09  
有人用grails开始实现类似wiki的东东,你可以参考一下
http://gatewiki.sourceforge.net/
0 请登录后投票
   发表时间:2008-12-07  
正开始写CMS
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics