小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

分享我的大型Java多用戶商城系統(tǒng)開發(fā)的心得和困難

 集微筆記 2013-11-21
看到別的朋友在ITEYE上發(fā)表的“開發(fā)電子商務(wù)網(wǎng)站技術(shù)選型“有感而發(fā)。地址是
http://www./topic/1119464
本人一直從事Java企業(yè)級(jí)開發(fā),因此接觸過(guò)不少Java的開發(fā)框架。目前作一個(gè)多用戶商城的創(chuàng)業(yè)項(xiàng)目,因?yàn)楸救酥粚V贘AVA,那沒(méi)有辦法,都不用選型了。進(jìn)入JAVA世界之后又有很多框架可以選擇,列舉幾個(gè)熟悉的,例如表示層struts, spring mvc, jsf,tapestry..., 控制層:spring/ejb, ejb不知道算不算阿,反正spring的作者說(shuō)了他開發(fā)spring是為了跟ejb抗衡而生的,見那本經(jīng)典的紅皮書:Expert One-on-One J2EE Development without EJB,這本也是我剛學(xué)spring所用到的。數(shù)據(jù)持久層:hibernate/ibatis/jdbc,歸根到底都是jdbc,這個(gè)一定要掌握。下面說(shuō)說(shuō)各個(gè)層面的選型比較。除了這幾個(gè)層面的,當(dāng)然還有其他的框架要選擇的了,java就是框架太多了,剛進(jìn)門的朋友估計(jì)眼睛都看花了。不過(guò)我奉勸各位新入門的朋友,一定要注意Java基礎(chǔ),所有的框架都是在這些基礎(chǔ)上幻變而成,而Java作web應(yīng)用的核心技術(shù)就servlet/jsp/jdbc/這幾個(gè)(ejb應(yīng)該也算吧,我看到很多大型應(yīng)用都離不開JMS/EJB等),有空研究一下JDK,Spring,Hibernate,Tomcat等開源框架的代碼,里面體現(xiàn)了n多的設(shè)計(jì)模式,代碼規(guī)范等,一定會(huì)給你帶來(lái)技術(shù)上的升華。我本人也剛開始看,覺(jué)得獲益不淺,如果我們只是知道怎么應(yīng)用框架而不知道他底層的含義,那只是停留在程序員的水平而以,所以往架構(gòu)師方向發(fā)展的話,Java要越做越底層。


先交待一下項(xiàng)目背景,要不就不知道為啥要這么選擇了?,F(xiàn)在電子商務(wù)是越來(lái)越火,淘寶和京東的廣告已經(jīng)滲透和生活的各個(gè)角落。雖然最近團(tuán)購(gòu)網(wǎng)是不太景氣,也有不少電商關(guān)門大吉。
但是我們有理由相信未來(lái)十年電子商務(wù)也是處于上升空間的。理由有下:
    1。 有研究說(shuō)美國(guó)的電子商務(wù)比例要比中國(guó)大很多,中國(guó)IT行業(yè)流行的東西往往要比外國(guó)晚一些,中國(guó)電子商務(wù)還是有很大的發(fā)展空間。
    2。 中國(guó)上網(wǎng)人群越來(lái)越多,現(xiàn)在哪個(gè)小孩子不會(huì)使用電腦,哪怕是窮二代也好。而年紀(jì)大的人不一定會(huì)的
    3。 網(wǎng)購(gòu)確實(shí)給人們生活帶來(lái)了方便,尤其經(jīng)濟(jì)不好時(shí),可以給大家提供更便宜合適的產(chǎn)品。
    4。 中國(guó)做的有點(diǎn)規(guī)模的公司應(yīng)該不會(huì)只滿足于在淘寶/拍拍等網(wǎng)站上面開個(gè)店而已,京東/走秀網(wǎng)的成功會(huì)刺激其他人加入這個(gè)行業(yè)競(jìng)爭(zhēng)。
    5。 淘寶實(shí)行提高門檻的做法,可能會(huì)把一部分小商家擠出來(lái),不排除這些商家有建立獨(dú)立網(wǎng)站的需求,但是要解決信用,流量的問(wèn)題先。
   
    以上理由是個(gè)人YY出來(lái)的,大家不要太認(rèn)真,反正我們就是要以商城為主導(dǎo)來(lái)進(jìn)行一個(gè)創(chuàng)業(yè)項(xiàng)目。OK,好了,那開始分析目前獨(dú)立商城系統(tǒng)的競(jìng)爭(zhēng)對(duì)手。
   
    目前php商城占據(jù)了大部分市場(chǎng),跟著是.net商城,java商城沒(méi)有幾個(gè)好的,為排除作廣告嫌疑,這里不出現(xiàn)任何商城系統(tǒng)的名字。為什么有這個(gè)現(xiàn)象呢,其實(shí)java語(yǔ)言的優(yōu)勢(shì)是非常明顯的,銀行電信行業(yè)基本都是以java為主,這個(gè)是我本人工作經(jīng)歷所見。包括現(xiàn)在淘寶/京東都有向java方向靠攏的趨勢(shì),由于java語(yǔ)言本身的架構(gòu)是比較合適做大型應(yīng)用,我們有理由相信java商城會(huì)由更大的發(fā)展空間。我們要著手解決Java開發(fā)成本高的問(wèn)題,因此好的框架和開發(fā)模式是少不了的。
   
    因此我們寫了一個(gè)Java多用戶商城系統(tǒng)立足B2C,跟進(jìn)C2C,前面的C其實(shí)是很多個(gè)B組成的,可以理解為B2B2C,類似淘寶商城模式。這樣我們可以滿足B2C的需求,也可以滿足那些C2C人的要求,也避開市場(chǎng)上已有的成熟的商城的競(jìng)爭(zhēng)。這里有一個(gè)好處是可以結(jié)合淘寶和百姓網(wǎng)趕集網(wǎng)模式作本地商家運(yùn)營(yíng),就是每個(gè)城市或者高校都找一家代理商獨(dú)自運(yùn)營(yíng),數(shù)據(jù)都單獨(dú)保留在他們的服務(wù)器上,我們總站只保留少量數(shù)據(jù),例如單點(diǎn)登陸,統(tǒng)一的社區(qū),統(tǒng)一的搜索體驗(yàn)等,這是個(gè)大project,暫時(shí)還沒(méi)能推進(jìn)下去,但是這個(gè)前途是無(wú)可限量的。已經(jīng)有好些人咨詢過(guò)類似方案,這樣可以集百家之長(zhǎng)來(lái)跟一些大型的商城抗衡,也就是B2B2C的模式吧,是個(gè)很好的思路,但是需要有實(shí)力的人去推動(dòng)才行,估計(jì)以后會(huì)由類似商城出現(xiàn)。
   
    說(shuō)太多的背景了,話回主題。目前系統(tǒng)已經(jīng)小有成績(jī),但是也遇到不少問(wèn)題,這里拿出來(lái)跟大家分享。
   
    我心目中最好的框架組合是:
    表示層:spring mvc 3.1 + annotation
    控制層:spring 3.1
    持久層:hibernate 3.6 +jdbcTemplate
    后臺(tái)列表控件:displaytag 1.2
    Ajax框架: DWR 3
    JS框架 : Jquery
    緩存機(jī)制:spring 3.1 cache + ehcache/memcached
    靜態(tài)化機(jī)制: Freemarker靜態(tài)化/spring mvc偽靜態(tài)化
    頁(yè)面技術(shù): EL + JSTL +JSP
    安全框架 spring security
    搜索引擎: Lucene
    中文分詞:IKAnalyzer
    模板引擎: apache tiles 2.22
   
   
    以上框架均使用目前最新框架,如果有更新特性出來(lái)的話可能會(huì)更換。
   
    部署視圖所需:
    數(shù)據(jù)庫(kù): mysql
    Web 服務(wù)器: windows 下用apache, linux 下用ngnix
    應(yīng)用服務(wù)器: Tomcat
   
    另外一些分布式的技術(shù),例如EJB/web service/JMS等沒(méi)有使用,如果改變部署方案時(shí)或者需要集成其他系統(tǒng)時(shí)可能會(huì)引入。
   
    一個(gè)中小型的部署方案是1臺(tái)Web 服務(wù)器 + 2臺(tái)Tomcat服務(wù)器 + 1臺(tái)memcached服務(wù)器 + 1臺(tái)圖片服務(wù)器 + 1臺(tái)數(shù)據(jù)庫(kù),此方案是方便系統(tǒng)不斷的升級(jí),而又使得投資比較少。
當(dāng)然更大型的解決方案需要更多的服務(wù)器和在數(shù)據(jù)庫(kù)上做更多的優(yōu)化動(dòng)作。最省錢的辦法就是1個(gè)服務(wù)器就運(yùn)行以上所有的服務(wù),這個(gè)也不是不行,有個(gè)1G的內(nèi)存都已經(jīng)能應(yīng)付不少流量了。在那些便宜的JSP空間只要有256/512M內(nèi)存也可以跑,大有大的跑法,小有小的跑法。
  

    下面就比較關(guān)注的框架做個(gè)簡(jiǎn)單的對(duì)比:
   
    1 spring mvc vs struts2
    我們本來(lái)是采用struts1.3來(lái)開發(fā),struts那層用的非常的薄,只是用于接收頁(yè)面參數(shù)和拿到數(shù)據(jù)庫(kù)數(shù)據(jù)之后打印到request中讓頁(yè)面展現(xiàn)。按理應(yīng)該直接升級(jí)為struts2才對(duì),但是看了spring mvc 2.5的annotation版本之后就拋棄struts2了,spring mvc可以讓我很容易從頁(yè)面拿到數(shù)據(jù),并且采用非常少的配置和具有很強(qiáng)的靈活性,看了struts2之后覺(jué)得都是大同小異的思路,那我何必再引入更多的jar..
    2. hibernate va jpa ibatis
    Jpa跟Hibernate很類似,個(gè)人感覺(jué)沒(méi)有hibernate靈活,hibernate在快速開發(fā)上是很有優(yōu)勢(shì)的,加上cache可以部分彌補(bǔ)性能上的損耗,另外盡量不用他的那個(gè)配置做復(fù)雜的關(guān)聯(lián)。
    另外可以用jdbcTemplate頂上用的比較多的地方以提高性能。
    3. DWR vs Jquery
    DWR在js和后臺(tái)java代碼之間是很好的橋梁,尤其是跟spring配合的很好,但是Jquery在頁(yè)面的功能是少不了,還好兩者不排斥對(duì)方,那就一起用了。
    4. spring 3.1 cache + ehcache/memcached
     spring 3.1 直接支持cache了,這次hibernate的二級(jí)緩存可以退休了。如果在單機(jī)選擇ehcache,集群方式采用memcached。 memcached是遠(yuǎn)程調(diào)用,性能必然會(huì)有損耗。
    5. JSP vs freemarker velocity
    自從JSP有了JSTL之后, struts 的標(biāo)簽我已經(jīng)不用了,加上EL之后我也沒(méi)有找到用freemarker velocity的理由,除了靜態(tài)化之外,貌似JSP也可以做靜態(tài)化的,這個(gè)我研究不深,如果有反對(duì)意見可以提出來(lái)。
    6. apache tiles vs sitemesh
    由于是學(xué)struts出身,tiles熟悉阿,而且現(xiàn)在也支持模糊匹配了,看一些網(wǎng)上評(píng)論說(shuō)性能不會(huì)有太大差別,sitemesh3也許會(huì)好些,用生不如用熟。不過(guò)均不能達(dá)到那種實(shí)時(shí)生效的模板效果,誰(shuí)能說(shuō)說(shuō)java怎么做?
    7. 其余幾個(gè)就沒(méi)什么懸念了, 由于現(xiàn)在免費(fèi)的jsp空間比較多的支持mysql和tomcat, 所以這2個(gè)是我們要優(yōu)先支持的,雖然我們也支持oracle等。
   
    問(wèn)題:
    1。模板技術(shù)缺少靈活性,目前Php的大型商城系統(tǒng)有很多的模板可以用,這個(gè)也不全都是官方自己開發(fā)的,這個(gè)是Java商城需要向php商城學(xué)習(xí)的地方。因?yàn)閖ava是mvc方式建設(shè)的,有java,jsp, html等,java class需要重啟服務(wù)器才能生效,而且很難像php一樣,把所有東西寫在一個(gè)目錄拷貝到服務(wù)器上即可使用,目前我還是沒(méi)有什么好的思路能達(dá)到這個(gè)效果的,考察了apache tiles/sitemesh/freemarker/velocity等,都沒(méi)有想到辦法。。。只能做到內(nèi)置好模板讓用戶挑選。要達(dá)到大家都能做模板的程度,需要把代碼和文檔繼續(xù)完善和開源。
    2。B2B2C模式需要大量的人力物力,目前還不成熟。需要有實(shí)力和經(jīng)驗(yàn)的人加盟我們。
    3。java開發(fā)代價(jià)是高了些,通過(guò)對(duì)框架的整合和默認(rèn)約定,已經(jīng)把后臺(tái)代碼的使用方式給固定下來(lái),前臺(tái)頁(yè)面是比較耗時(shí)。但如何降低總體開發(fā)難度并開創(chuàng)一個(gè)Java品牌商城是很有挑戰(zhàn)和難度的。

轉(zhuǎn)自:http://onecan./blog/1333520

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多