這一陣子在做一個(gè)項(xiàng)目, 客戶要求使用ExtJs/ vs2008 sql server 2005, 也是好長(zhǎng)時(shí)間沒有去看新的技術(shù)和一些框架;
初步設(shè)計(jì)是準(zhǔn)備使用 ExtJs + HTTPHandle方式提供json + google上的josnserialization + linq to sql, 基本能滿足應(yīng)用(開始也沒有查太多資料,不知道linq to sql 微軟后期不支持了);
但是客戶是技術(shù)驅(qū)動(dòng)性的技術(shù)員(喜歡新技術(shù)), 在設(shè)計(jì)上沒有太多經(jīng)驗(yàn), 但是對(duì)新技術(shù)還是能知道干什么, 所以要求用 wcf service 和 Entity framework, 沒有辦法花了2天時(shí)間研究和測(cè)試了一下, 感覺很實(shí)用, 下面根據(jù)我的理解說說我的思路.
客戶端(Client)js框架
ExtJs重量級(jí)的框架,很強(qiáng)大,擴(kuò)展性強(qiáng),集成了java swt的很多特性, 不要太多說了, 但是體積大, 不適合互聯(lián)網(wǎng)網(wǎng)站開發(fā), 但是做企業(yè)內(nèi)部的管理系統(tǒng)是非常合適;
JQuery 輕量級(jí)的框架,擴(kuò)展強(qiáng),但是沒有ExtJs那么現(xiàn)成的支持庫, 適合做互聯(lián)網(wǎng)開發(fā);
前端(Font end)
Asp.net MVC
集成了castle monorail的優(yōu)點(diǎn), 多了圖形化設(shè)計(jì)支持, 同時(shí)和.net無縫集成, mr用了很長(zhǎng)時(shí)間, 前段時(shí)間beta版出來的時(shí)候做了一下技術(shù)測(cè)試,感覺很好用,但是還是不太成熟, 相信release版本會(huì)比較成熟的模版語言和支持.
WCF Service
WCF相信大家很清楚了, 很多.net 3.5上技術(shù)的基礎(chǔ), 用Wcf service 的 Ajax-enabled WCF Service 提供json數(shù)據(jù),根本不需要太多編碼,太方便了;
Entity Framework
在ORMapping上基本集成了NHibernate的特點(diǎn), 但是在友好性和圖形界面上遠(yuǎn)遠(yuǎn)優(yōu)于NHibernate, 在CSDL上的定義更靈活直觀;
能使用Entity Query語言(類t-sql), linq to entity(基于查詢和基于函數(shù)的兩種方式查詢), 最大的好處我感覺在生成執(zhí)行的sql語句,因?yàn)橛辛藀roperty change事件支持, 他的sql只是在選擇時(shí)只查找指定的字段,使數(shù)據(jù)量小了, 在更新和插入時(shí),只更新對(duì)象中修改屬性對(duì)應(yīng)的數(shù)據(jù)庫字段;
以上技術(shù),我都只是根據(jù)以前項(xiàng)目經(jīng)驗(yàn)做了一下簡(jiǎn)單技術(shù)測(cè)試, 沒有做性能測(cè)試等, 沒有太大的深入; 也只是提供一個(gè)項(xiàng)目技術(shù)框架的思路而已;
發(fā)表評(píng)論
個(gè)人感覺如果用MVC的話,WCF其實(shí)是可有可無的,因?yàn)锳jax-enabled WCF Service一般在使用時(shí)是設(shè)計(jì)成RestFul風(fēng)格,而WCF本身也推薦做成RestFul風(fēng)格的,所以單純考慮用Jquery獲取JSon數(shù)據(jù)時(shí),完全只需要一個(gè)Url就可以了,也就是說凡是能用RestFul方式WCF的地方,用MVC的路由規(guī)則也能方便實(shí)現(xiàn),關(guān)鍵還是把業(yè)務(wù)層能抽象分離出來,至于最終的表現(xiàn)形式是以WCF方式暴露,還是直接用MVC的路由+Action暴露,只是形式問題;最后提一下最近大家爭(zhēng)得比較多的口水問題,linq to sql? or linq to entity?其實(shí)客戶既然指定了用sqlserver的話,這二個(gè)在使用上其實(shí)區(qū)別不大,都是支持linq語言查詢,都很方便快捷,至于在ORM概念上的區(qū)別,我認(rèn)為在一般Web項(xiàng)目中,根本區(qū)別不大,畢竟不是所有的web項(xiàng)目,都把數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)得很復(fù)雜,用一堆模式再結(jié)合繼承...等等,相對(duì)而言,我覺得linq to entiry更象是linq to sql的一個(gè)升級(jí)重量型版本
至于性能問題,一般來講技術(shù)構(gòu)架不會(huì)太影響性能(當(dāng)然前提是合理的編碼),如果用戶并發(fā)量極大,就算做成純靜態(tài)頁面,也還是會(huì)有瓶頸問題(最終還是要用錢來燒的,呵呵,比如硬件升級(jí)/負(fù)載均衡/CDN節(jié)點(diǎn)加速等)
@菩提樹下的楊過
呵呵, 這幾塊技術(shù)相對(duì)我來說都是比較新的,也許是快2年沒有看過新東西了, 現(xiàn)在正在深入學(xué)習(xí)一下WCF.
MVC方式開發(fā),Ajax提供的數(shù)據(jù),完全可以用模版或者直接輸出出來, 我現(xiàn)在的MR就是這么做的, 我對(duì)ASP.net MVC理解還不夠, 呵呵, 因?yàn)橐恢庇肕R, Asp.net mvc又是ms自己的. 但是不喜歡微軟把什么東西都搞成服務(wù)端控件或者服務(wù)端運(yùn)行的方式, 很多時(shí)候根本不需要, 好像很多大型網(wǎng)站都是拋棄了這些東東.
我引入WCF當(dāng)時(shí)想到的是WCF支持很多binding, 而且可以用iis來hosting, 讓以前單純BS結(jié)構(gòu)不可能實(shí)現(xiàn)的功能成為可能, 譬如:WCF結(jié)合SL來進(jìn)行大文件上傳等功能.
linq to sql相對(duì)EF是輕型, 他的功能基本被EF包容了, 但是感覺EF的ObjectContext機(jī)制更靈活. EF感覺問題還很多,譬如對(duì)視圖映射出概念類后,全是鍵, 還有在概念模型中定制關(guān)系還不是很好用, 我習(xí)慣只是畫出數(shù)據(jù)庫表主外鍵約束, 不會(huì)真的建這種約束,畢竟這種約束在系統(tǒng)性能上會(huì)是一種性能瓶頸, 但是EF在不建立約束的情況下,自己定義很多時(shí)候就會(huì)編譯報(bào)錯(cuò)等等,不知道是了解不深入還是其它 .
靜態(tài)化/負(fù)載均衡 的方式還是需要在后臺(tái)性能和框架比較好的基礎(chǔ)上進(jìn)行, 就像前一陣子我公司網(wǎng)站, 用了Memcached 和Mysql的內(nèi)存表來提高性能,最后發(fā)現(xiàn)被當(dāng)成了垃圾站,開發(fā)人員為了省事什么都往里面放, 導(dǎo)致緩存服務(wù)器流量其大無比,呵呵.
現(xiàn)在感覺系統(tǒng)做大了,還是需要理論來配合應(yīng)用,越來越感覺了解的知識(shí)面太少. 我對(duì)這些都理解不深,天花亂墜的說一通, 呵呵.