遲到的2010總結

中國人的年,是以春節爲準的。春節過後,才真的算是一年的結束,新的一年的開始。而今天已經是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年裏,能夠將這個項目做的更好,成爲一個社區能得到更多人接受的產品。也算是我對自己的一點點負責吧。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章