Kooboo的定位是一个CMS,内容管理平台,从更严格意义上来说,它更应该网站快速开发平台。针对一般网站开发过程的分析和提炼,着重在解决网站的一般需求,提出一套快速开发网站的理念和方法。在这些理念和方法的指导下,来进行网站的开发,规范开发过程,提高开发效率,减少维护成本,提高网站质量。
我们在开发一个网站,一般会面对如下问题:
内容存储,这是一个基础性问题。内容是整个网站的肉体,也是灵魂,失去了内容,网站就无法体它的价值。网站开发的最重要的工作就是对内容的处理,也就是对内容进行增,删,改,查的处理。或者更为直接点,就是开发人员对数据库的操作。而如何对内容数据,直接影响着开发效率。开发人员不可避免的要处理大量的SQL语句,或者使用ORM等工具和框架来提高开发效率。但是不管怎么样,开发人员还是需要面对大量的开发和配置工作。而Kooboo要解决的首要问题就是要让开发人员从些重复,而又繁重的工作摆脱出来,实现一个通用化的存储,开发人员甚至不需要关心数据是存储在数据库,还是本地文件中。内容存储,开发人员只要根据自己需要的字段,设计好相应的数据结构(Schema,内容类型),建立相应的内容目录(Folder),就可以使用相应的接口对这些内容进行操作,而不需要去关心SQL或者是其它的存储细节,同时内容关系不是简单的一维关系,可以处理1对1,1对多,多对多的关系。并且,通过Kooboo的后台可以直接维护这些内容,不需要再重新开发单独的后台来维护网站内容,减少开发任务。
多网站处理,内容共享的问题。在现实中,我们可能会面对,一个组织关系中的各个机构需要有内容共享,但结构独立的网站。当我们遇到这种问题时,我们通常的处理办法是为各个机构单独开发网站,在遇到需要共享的数据时,通过一定的技术手段,或共享数据库,或共享目录来实现目的。再有一种典型场景,当我们要开发一个全球性的网站时,不可能避免的要解决各个地区语言和文化的问题。单单是语言,我们可以通过资源文件来解决,但当个地区站点除了语言要不同外,网站中的某部分内容要根据本地区文化特点进行一些改动时,如何通过最小改动来达到复用和定制?内容也需要根据不同地区进行本地化时,这也不是简单的通过资源文本就可以解决的。同样的,你可以把这些想法扩展一下,想开发一系列功能相同,UI类似的企业网站之间的复用。在Kooboo中,每一个网站,只是这个平台的一部分。这个平台可以同时存在很多有直接关系,或没有任何关系的网站。所有的网站都可以有自己独立的域名。网站之间,可以有直接或间接的继承关系。在继承的网站间,可以共享和复用网站的各种元素。子站可以完全继承父站点的所有的代码和内容,同时也可以根据需要对父站点的所元素进行一些特定的改动,以达到通过最小的改动,最大的复用,并且它不是简单的物理复制,也就是说,如果父站点发生的任何变化,同样会体现在继承的网站中。这个就是网站的继承,继承不仅可以继承内容,还可以继承代码和模板,可以支持本地化,也就是满足面向对象的三个基本特征。
模板管理。对一个网站来说,给用户最直观的体验就是网站的UI。对于动态页面来说,设计界面就是设计模板。在Kooboo中,使用传统的Webform的.ASPX页面做为模板,延续了ASP.NET程序员的开发体验。同时在提供了完善的皮肤管理,脚本管理,资源管理,并且提供了功能强大的在线语法编译器,把程序员从复杂的路径样式引用和语法记忆中解脱出来。模板可分为布局模板和内容模板,布局模板是控制整个页面布局的模板,其概念等同于MasterPage; 内容模板是页面中某一块内容的模板,它关心的是页面某一部分的展示。
页面管理。与ASP.NET WebForm的页面概念不同的是,在Kooboo中,“页面”并不是一个物理存在的.ASPX页面模板。页面只是将模板和数据组合在一起的,同时具备URL表现的一些配置值。这些配置信息决定了,在该页面里,所选择的模板的某个位置上放上哪些页面模板; 决定了该页面需要传递的参数,以及这些参数以什么样的方式进行传递(普通传参或SEO友好); 决定了该页面从哪里查询所需内容(DataRule); 决定了哪些角色的人能访问该页面。同时页面管理,也可以用于生成前台页面导航菜单。
扩展插件。一个完善的开发平台,不可避免的要提供解决一些特殊情况的能力,同时也必须针对一些通用性的功能,比如论坛,博客,Wiki等功能的一整个模块的复用,以提供资源复用的共享。在Kooboo中,有两种插件:页面插件和模块插件。页面插件(PagePlugin),就是针对某个页面的特殊要求而开发的运行于通用Controller之上的Controller扩展,适用场景:一个网站前页,可能80%页面是用于显示,另外还有一部分可能还需要有提交数据的要求,那么这些提交的数据可以在View中通过传统的WebForm PostBack来处理,同时也可以通过编写页面插件来独立出来,从MVC的组成部分来讲,编写页面插件也更符合框架要求; 另一种情况可能是,页面需要的部分数据并不存储在Kooboo中,而是需要通过其它的一些渠道(例WebService)从其它地方获取,此时你也需要通过编写插件来达到你的目的。 模块插件是针对某一种应用的完整功能的复用而开发的完整的功能包,可能是一个简单的博客系统,论坛,或是其它可以被复用的小功能,这些功能模块可以被加到页面模板的任意位置上(与普通的内容模板一样使用)。在kooboo中,每一个模块插件都可以做为一个独立的网站而存在,不一定要求运行于Kooboo平台之上,你可以将它视为一个Mini Site,如果你了解ASP.NET MVC2,那你可以理解为一个类似于Area的功能。开发一个模块插件,也就是开发一个普通的MVC站点,你可以单独进行开发和调试。
站点包。一个网站开发后,可能需要从开发平台移植到生产环境平台去。此时,你可以将设计好的站点进行导出操作,然后在另一个Kooboo平台,选择导入操作。很快,你会发现,站点包还可以有另一种应用。如果你设计一个站点模板,然后根据这个模板快速生成一些类似的网站,这也就是很多网站快速生成软件的做法。也就是一个站点设计好,不仅能被继承复用,还可以被导出复用,达到最大的复用。
以上都是Kooboo的核心功能,但是当你深入了解Kooboo后,还会发现更多实用的功能,包括:
内置的全文搜索,使用Lucene.net,在维护内容时自动更新全文索引文件,通过一个简单的API可以快速实现全文搜索的功能。
简单的工作流管理,内置一个简单的工作流功能,方便内容维护时实现流程审核流程。
脚本和样式文件的自动合并和压缩,通过设置一个简单开关,来配置网站是运行于Debug模式或是Release模式。当运行于Release时,会自动合并压缩脚本文件和样式文件。
出错管理,站点在出现错时,可以根据错误类别配置要转到的页面。
以上的这些功能都是Kooboo要解决的核心问题,我会在稍后的一系列文章中,使用Kooboo 1.2 再深入的展开每一个功能点的各个细节。Kooboo 1.2会在稍后的一至两周内发布,敬请期待。
CodePlex站点:http://kooboo.codeplex.com/
Live Demo: http://www.kooboo.com/demo
kooboo Wiki: http://wiki.kooboo.com