Megento 架構基礎知識概述javascript
Magento整合了面向對象的基於PHP的應用程序的核心架構原則。這些通常原則的綜合討論既有在線的,也有印刷形式。如下討論主要關注這些主題如何直接應用於Magento:php
- Magento技術堆棧
- Magento查看模型
- 可擴展性
- 模塊化
- 事件驅動的體系結構
- 安全
架構圖:html
Magento架構從不一樣的角度根據您的角色和學習Magento更多信息的目的,有幾種不一樣的方式能夠查看Magento體系結構。前端
例如,想要建立新模塊或者可能定製現有模塊的開發人員將但願經過Magento框架和其餘組件瞭解模塊自己的架構,以及它如何適應更大的視圖。可是,想要快速構建在線商店陣營的商家但願從更高級別查看組件集合,並瞭解影響外觀,感受和用戶交互組件的組件。java
架構層圖下圖說明了Magento的組件,並顯示了全部組件的「層」或層,以及Magento框架,第三方庫,支持的數據庫和其餘技術。
jquery
》可擴展性和模塊化linux
什麼使產品具備可擴展性?nginx
Magento的可擴展性描述了產品內置的能力,讓開發商和商家隨着業務的增加而按期擴展店面的功能。如下是影響可擴展性的主要因素。算法
指導產品結構的架構原則 數據庫
Magento軟件開發模式的核心是替換或擴展核心代碼而不是編輯它的作法。這一策略支持您盡力維護咱們提供的測試代碼的完整性,同時仍普遍地定製您的店面。
開源軟件來建立和管理擴展
Magento創建在爲開發社區而開發的開源技術上。例如,它使用Composer來管理依賴關係。請參閱Technology Stack瞭解所用技術的完整列表。
編碼標準
遵照標準的PHP和JavaScript代碼最佳實踐可確保代碼基礎健全。Magento已經採用了PHP的大部分Zend Framework編碼標準。有關更多信息,請參閱編碼標準。
升級和版本控制策略
Magento具備明肯定義的升級和版本控制策略,可幫助您避免軟件組件依賴關係出現任何問題。確認模塊版本與Magento Framework版本兼容後添加模塊。
》易於前端定製
Magento前端旨在優化店面定製,高度可擴展的主題是中央定製機制。鼓勵商家使用Magento組件和主題來擴展和改變店面的外觀。
店面定製工具Magento提供了幾個工具來幫助您大幅啓動店面定製過程:
有關建立主題的信息,請參閱前端開發人員指南。
》支持可擴展性的全局功能
基本的品質促進整個Magento組件的擴展性。本討論的重點在於:
模塊化
模塊的概念是Magento擴展開發的核心,軟件組件的模塊化設計(特別是模塊,主題和語言包)是該產品的核心架構原則。獨立代碼的獨立模塊按功能進行組織,從而減小每一個模塊的外部依賴性。若是模塊是獨立的,那麼您能夠修改或替換它,而不會影響代碼的其餘部分。軟件組件的鬆散耦合減小了整個代碼變動代碼的連鎖反應。
依賴流行的設計模式
依賴於已知的架構和編程結構有助於PHP開發人員將本身定位於影響特定產品生態系統中編碼的特定開發問題。
這能夠減小新Magento開發人員的學習曲線。
設計模式是通過時間考驗的,被普遍承認的軟件架構結構。
Magento產品體系結構包含許多衆所周知的模式,但模型 - 視圖 - 控制器(MVC)對擴展開發人員特別感興趣。
編碼標準
Magento開發人員應該熟悉咱們的編碼標準,最佳實踐和慣例,特別是PHP文件格式標準,編碼風格和文件命名約定。Magento標準基於Zend Framework編碼標準。有關準則和要求,請參閱編碼標準。
豐富的產品系統
更普遍的Magento生態系統爲擴展提供了普遍的社區和豐富的第三方市場。訪問Magento Marketplace,瞭解可供下載的許多模塊和主題的概述,以及購買模塊和主題包,這些爲擴展店面提供了更多的可能性。
靈活的屬性類型
您能夠經過向默認產品屬性添加惟一屬性來加強店面效果。例如,您可能須要添加一個新屬性來描述產品,例如紋理或行業特定評級。您能夠從Magento Admin中添加這些屬性,而且店面顯示它們。
屬性類型分爲三大類:
EAV(實體 - 屬性 - 值)屬性是特定於站點的屬性,您可使用Magento Admin爲本地站點定義屬性。自定義屬性是EAV屬性的子集。使用EAV屬性的對象一般將值存儲在多個MySQL表中。客戶和目錄模塊使用EAV屬性。擴展屬性一般使用比自定義屬性更復雜的數據類型。這些屬性不會出如今店面中。擴展屬性由模塊引入。有關使用屬性的信息,請參閱PHP Developer Guide。
Web API
可使用一些簡單的XML將Magento或第三方服務配置爲Web API(REST或SOAP)。您可使用這些服務將您的Magento安裝集成到CRM(客戶關係管理),ERP(企業資源規劃)後臺系統和CMS(內容管理系統)等第三方應用程序中。有關更多信息,請參閱Magento Web API入門。
服務契約,依賴注入和依賴倒置服務合同
提供了一種訪問公共API端點的新方法。這些PHP接口提供強大,穩定的客戶端能夠鏈接的擴展點。服務合約定義了做爲模塊的公共API的端點。定義這些端點是添加模塊的重要部分。服務合同在整個Magento文檔集中討論。請參閱服務層以進行高層介紹。有關服務合約和依賴注入的更詳細討論,請參閱PHP開發人員指南。
Magento實現了依賴注入和服務契約。依賴注入提供了一種機制,能夠在不改變客戶端或理解實現細節的狀況下改變模塊的行爲。依賴注入及其相關的概念依賴倒置支持Magento的模塊化和易擴展性的基本架構原則。他們強烈鼓勵支持鬆散耦合軟件模塊的基本編碼實踐。有關依賴注入和服務合約的信息,請參閱PHP開發人員指南。
插件
插件與模塊同樣,是爲核心Magento產品添加功能的機制。經過插件,您能夠更改Magento類中任何公共方法的行爲。你能夠認爲它是一種使用Plugin類的擴展形式。
插件也稱爲攔截器。應用程序使用插件模式來更改方法行爲,而無需修改實際的類。插件一般能夠在方法運行以前或以後攔截方法處理,或僅在方法拋出異常時攔截方法處理。請參閱PHP開發人員指南中的插件,瞭解有關聲明插件和優先化插件的信息。
------------------------------
-安全
概述加強密碼管理Magento增強了用於密碼管理的散列算法(SHA-256)。經過將轉義數據設爲默認值,改進了對跨站點腳本(XSS)攻擊的防範Magento框架已經經過了規範輸出數據轉義的約定。這些約定包括爲HTML頁面(HTML,JSON和JavaScript)和電子郵件轉義輸出的能力。在可能的狀況下,轉義對客戶端代碼是透明的。請參閱前端開發人員指南中針對XSS攻擊的安全措施。
》更靈活的文件系統全部權和權限
從2.0.6版開始,Magento再也不明確設置文件系統權限。相反,咱們建議某些文件和目錄在開發環境中可寫,而且在生產環境中是隻讀的。爲了向您提供一種簡單的方式來限制對生產中的文件系統的訪問,咱們爲您提供了使用umask進一步限制這些權限的靈活性。有關開發和生產中的全部權和權限的詳細信息,請參閱開發和生產中的Magento全部權和權限。
》改進了對點擊劫持漏洞的預防
Magento經過使用X-Frame-Options HTTP請求標頭保護您的商店免受點擊劫持攻擊。有關更多信息,請參閱X-Frame-Options標題。
》使用非默認的Magento Admin URL
一個簡單的Magento管理員URL(如管理員或後端)可使用自動密碼猜想輕鬆定位針對特定位置的攻擊。爲了防止這種類型的攻擊,默認狀況下,Magento在安裝產品時會建立一個隨機的管理URI。提供了CLI,以便您能夠在忘記密碼時查看密碼。您也可使用CLI更改此URI。雖然使用非默認的管理員URL並不能保護網站,但它的使用將有助於防止大規模的自動攻擊。有關更多信息,請參閱顯示或更改配置指南中的Admin URI。
---------------------------------
店面定製策略
咱們能夠歸納介紹Magento支持的店面定製範圍。
這個範圍跨越了最簡單的定製,這些定製只涉及對默認Magento店面設置的小增長,以徹底替代Magento提供的HTML和CSS。
》店面定製級別
爲了增長複雜性,列出了潛在店面定製的這四個級別。
------------------------
技術堆棧
版本2.0.x
版本2.1.x
Magento高度模塊化的結構包括如下開源技術。
Web服務器
PHP
數據庫
HTTP加速器
緩存存儲
搜索
Solr(僅限Magento Enterprise Edition)
Elasticsearch(僅限Magento企業版2.1.x)
其餘技術
可選堆棧組件
Magento兼容但不支持:
自動化測試
Magento還提供自動化測試套件,包括單元,集成,功能和性能測試腳本,以及用於靜態代碼分析的JavaScript測試和工具。組件包括用於單元測試框架的PHPUnit和用於功能測試框架的Selenium。
該框架位於dev/tests目錄中。功能測試框架mtf能夠在單獨的存儲庫中找到。有關更多信息,請參閱功能測試框架指南。
------------------------------
向後兼容
商家和開發商但願在Magento 2的修訂之間升級的過程儘量簡單。對於商家來講,這個過程必須具備成本效益,而開發人員但願他們的擴展儘量地向前兼容。
爲了幫助減輕這些擔心,本版本爲PHP代碼引入了向後兼容(BC)策略。Magento 2.0使用語義版本2.0.0來代表更改是否會破壞向後兼容性。版本號格式爲MAJOR.MINOR.PATCH,其中:
向後兼容性策略適用於使用@api註釋的PHP代碼。咱們承諾在MINOR和PATCH更新到咱們的組件時,向後兼容使用@api註釋的類和方法。在引入更改時,咱們使用@deprecated註釋方法。這些方法僅在下一個MAJOR組件版本中被刪除。咱們將努力每一年不超過一次對組件進行主要更改。
有關更多信息,請參閱PHP開發人員指南中的向後兼容性。
------------------------------
版本控制策略
Magento系統及其組件使用軟件(或「平臺」)版原本指示實現中的變化(代碼級別)的兼容性。經過比較相同組件的兩個版本,能夠判斷它是否在公共API或其餘重要代碼更改中存在任何向後不兼容的更改。
Magento軟件版本符合如下規格:
=========================