阿不

潜水

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  212 随笔 :: 0 文章 :: 3067 评论 :: 75 引用

公告

中国人的年,是以春节为准的。春节过后,才真的算是一年的结束,新的一年的开始。而今天已经是2011年2月12日了,现在看着2010的字眼,总是觉得那么遥远,第一感觉就像是过了好几年似的。今天原本是周末,不过按国家规定,今天还是一个工作日。不过前几天的忙碌结束以后,今天还算终于事情比较少一点。早上折腾了手机之后,下午也需要好好思考一下未来的工作安排了。

原本没想写这个2010年总结了,但是看着别人的总结,再看看自己过去曾经所写的总结。怎么看,虽然都是流水帐似的,但还是很有意义。通过这样的记录,至少能让我知道过去的一年都做了一些什么样的事情,在技术和认识上都有什么新的变化。几年下来,当然我们再将这些总结放一起阅读时,就会别有一种味道。

2010年,工作内容没有任何的变化。自己的工作重心仍然是在Kooboo CMS这个开源项目之上。但是跟踪我们产品的很多人可能会误以为我们这个项目已经死掉了(估计也没什么人跟踪)。自从2010年4月之后,我们就没再发布任何新的版本。因为我们做了一个艰难的决定,我们决定完全放弃之前版本的所有代码和实现,在不改变技术架构和业务模型的基础之上重新开发。这也就等于宣布了之前版本的失败,之后很长的一段时间,我们中断了社区支持,全心投入到新版本的开发。

新版本的开发,并不是一帆风顺的,从4月份到2011年初我们才又发了一个预览版。其中很长的时间,我们是在做界面和用户体验开发。单从程序上的实现角度来讲,我们希望尽可能的简单和干净,很多可有,可没有的东西,我们都尽量去掉。而程序本身也会更的更小,在并发控制,内存占用,安全,多数据库支持,目录结构,API设计等很多方面我们都吸引了之前版本的教训。我们也在不断的改进代码和功能,希望这个版本能真正成为一个有竟争力的产品。

产品开发本身的很多事情,并不是我一个人的工作,也不方便在这里过多描述。接下来,我要总结一下我这过去一年的技术感受,我要用一个非常流行的技术词汇来描述我过去一年最大的收获:No-SQL。即使我过去一年所使用的No-SQL技术并非像大部分人谈到No-SQL就会联想到的Mongdb,Cassandra等no-sql数据库技术,但我还是要说,我得到了彻底抛弃SQL关系型数据库的理由,并且应用在项目当中也给我带来了不少的便利。特别是,当我们要处理关系型数据库和对象之间的关系映射时,映射能力再强的ORM框架也都很难无障碍的映射。而在我们很多现实的项目开发中,很多关系型数据库的严谨模型我们也并不是一定会完全利用到。更多的时候,我们只是利用了它“存储”的属性,其它的属性我们可能都不是特别需要。如果只是简单的储存,我们可选择的就太多了,最简单的,我们可以把一个对象序列化存储到一个文件当中。使用了这种存储之后,我们也就没有了跨数据库的问题。在Kooboo CMS当中,大部的站点元素对象都是使用这种方式进行存储的。再结合目录的树状结构,我们就能很轻松的完成多种树状关系的设计。

在Kooboo CMS当中,有一个非常重要的组成部分就是通用化内容存储(内容数据库)。这部分的设计以前是以关系型数据库为基础的。但其实,内容本身就没有特别多的关系,在我们的设计中,也无非就是类别和子内容的关系,除此之外,它就是一个标标准准的key-value文档。这个版本在理清了这些关系之后,也给我们的API设计带来了灵感。我们用一套类似LINQ表达式的语法来表达我们对数据查询的需要,比如:

1. 从一个目录查询所有内容: newsFolder.CreateQuery() ;

2. 从一个目录查询一条记录: newsFolder.CreateQuery().WhereEquals(“UUID”,uuid).First();

3. 根据一个类别查询内容: newsFolder.CreateQuery().WhereCategory(categoryFolder.CreateQuery().WhereEquals(“UUID”,categoryUUID));

由于我们的文档内容本身都不是设计时的强类型,因此我们无法使用LINQ的那一套。在我们设计的这套API下面,我们可以像LINQ的Provider那样,根据不同的数据库查询语法需要,将上面的表达式解析成各种数据库的查询语法。目前已经支持的数据库包括:SQLCe,SQLServer,MongoDB,RavenDB还有最原生的XML文件。

对于No-SQL,我们缺乏的不是技术去使用它,缺乏的是那种思维和变通。如果我们脑子里面总是带着那么强烈的模型关系优先体现的原则来设计的话,就很难接受这种零散和看似不严谨的实现方式。但其实,对于大部分的Web性质的应用来讲,我们很多时候并没有那么强的事务性。

在2010年,我放弃了大量的可用可不用,用着看起来比较先进也能带来方便的第三方框架。以前,我还用Unity,EntityFramework(由于不再使用关系型数据库的原因),Enterprise Library等框架。可是用到最后,我发现,除了带来大量的dll文件之后,其它的一点用处都没有(dll的数量是我们项目的几倍)。Unity,发布以后就基本不再做配置变动了,很多时候让用户自己修改配置也都不是很现实的事情。Enterprise Library的每一个block,我们真的没有办法认定哪一个对我们来说都不可或缺,而配置和版本问题又特别的麻烦。其它的第三方框架尤是如此。我现在的原则是,只有那种不可替换的框架我们才用,比如压缩/解压。

ASP.NET MVC在这一年中,也有不小的进步和完善。从MVC2开始,MVC框架的可用性提高太多了,ModelMetadata和基于Metadata之上的表单方案,验证框架彻底激活了MVC的生产效率。因为MVC3,我还完全改变了我之后对于脚本与HTML结合的传统思维,虽然jquery一直都是unobtrusive js的写法,但直到MVC3中内置的unobtrusive特性之后,我才更加深刻的认识到这种无侵入的脚本与HTML结合能给我们的客户端世界带来多大的改变,在思维上有一个全新的改变。

2010已经过去了很久很久,我所能记忆起来的东西又极其有限。我只能通过Kooboo CMS这个项目的变化主线来总结我的这一年。在这一年当中,我其实什么事也干,就只花在这个项目的上了。虽然这是我的工作,但是一年(其它好几年)都只做这个事,没有其它的成就,还是让我缺少那么一点的成就感。当然希望在已经到来的2011年里,能够将这个项目做的更好,成为一个社区能得到更多人接受的产品。也算是我对自己的一点点负责吧。

posted on 2011-02-12 16:26 阿不 阅读(...) 评论(...) 编辑 收藏