opencart標簽,magento結(jié)構(gòu)
2022-08-24 11:05:09 - 米境通
用magento2開發(fā)過三個項目,大概用了一年多了,magento2是我用過的PHP開源中架構(gòu)最優(yōu)秀的。我對于優(yōu)秀架構(gòu)的定義是有極強的靈活性,magento2充分發(fā)揮了symfony依賴注入的優(yōu)點,讓組件代碼組織變得更松散,卻又加強了靈活性。也許很多人對于靈活性沒有什么概念,我舉一個我在joomla項目上的例子:
joomla項目某個客戶需求中要求改動文章組件的結(jié)構(gòu),joomla的文章并沒有EAV,不能增加字段,而且文章model層用的是傳統(tǒng)的OOP,而我需要擴展的數(shù)據(jù)成員是保護類型,就算我用繼承類也會因為不能修改保護類型而無法直接進行數(shù)據(jù)擴展。這可能只是個小小的修改,因為只需要我修改joomla的原始組件內(nèi)的程序一兩行代碼,但為了能保證以后能順利升級,我不能修改Joomla所有原始文件。無奈之下,我可能為了一個小修改而把文章model層的整個copy一份,再對它進行改造。這明顯是十分冗余的方法,讓有代碼潔癖的我也十分難受,而且隨著需求越來越多,代碼就開始變得難以維護。迭代的成本變得越來越高,最后改也改不動了,只能用其它CMS重構(gòu)。
另外也說說opencart,這是個十分容易上手的PHP開源電商,國內(nèi)也使用得十分多,還有仿京東的模板,名叫小京東。opencart的架構(gòu)就十分簡單,簡單得不像是有架構(gòu),很多擴展模塊,是需要對opencart原始文件替換來實現(xiàn)的。要是一直不升級還好,真要升級了就很麻煩,可能要整套代碼替換掉,再一個一個把模塊補上。不升級行嗎?如果只是普通的信息站,那就沒有沒有被入侵的價值了,有漏洞也不會有多大損失。但電商是跟錢有關(guān)的,每個漏洞都很有可能被利用,黑客也許會不動聲色,創(chuàng)建了已經(jīng)付過款的訂單讓你發(fā)貨,又或者把剛剛購買成功的訂單改成自己的地址。而真正付錢購買的用戶收不到貨肯定會投訴的。其實opencart比起國內(nèi)的開源電商要安全多了,但還是需要時常升級才能保證最低限度的安全性。無損擴展當然也是所有opencart使用者的需求,所以現(xiàn)在opencart有vqmod,這東西能不改動原始文件進行擴展,只是擴展的操作并不如那些已支持原始代碼擴展功能的系統(tǒng)方便。而且如果多個模塊對同一個代碼文件進行大量修改時,也不能保障互相之間沒有沖突,與magento2還是差遠了。
而在magento2下很少會出現(xiàn)這種架構(gòu)硬傷,依賴注入可以輕易通過修改幾行XML實現(xiàn)整個類的改造。在magento的Q群里,偶有高手來吹自己做過的變態(tài)價格優(yōu)惠策略。我認為甚至是雙11淘寶那些復(fù)雜煩人的優(yōu)惠價疊加在magento上也是可以實現(xiàn)出來的。所以我的結(jié)論是:對于一個需要長期迭代開發(fā)的項目,架構(gòu)的不足是會成為硬傷的。也許大家都知道m(xù)agento從1到2都很慢,2更是慢得離譜。但效率不是硬傷,你可以加多十幾臺服務(wù)器用于redis和varnish與mysql的負載均衡,但是不良架構(gòu)所造成的殘局根本找不到人來收拾。
magento2內(nèi)已經(jīng)有對于varnish和redis的支持,在nginx下部署跟在apache下一樣輕松,所以magento2要配上redisnginxvarnish的成本是很低的,根本就是標配,所以別老是說不用varnish就有多慢了,官方一直覺得那些是必須有的。