ORM MVC、模板引擎介绍(建议收藏)
ORM
- ORM
- 一、什么是ORM
- 二、認知 ORM
- 三、數(shù)據(jù)庫和對象的映射關系
- 四、優(yōu)缺點
- 五、常用的 ORM 庫
- MVC
- 什么是MVC
- 模板引擎
ORM
一、什么是ORM
ORM是隨著面向對象的軟件開發(fā)方法發(fā)展而產生的。面向對象的開發(fā)方法是
當今企業(yè)級應用開發(fā)環(huán)境中的主流開發(fā)方法,關系型數(shù)據(jù)庫是企業(yè)級應用環(huán)境中永久存放數(shù)據(jù)的主流數(shù)據(jù)存儲系統(tǒng)。
對象和關系數(shù)據(jù)是業(yè)務實體的兩種表現(xiàn)形式,業(yè)務實體在內存中表現(xiàn)為對象,在數(shù)據(jù)庫中表現(xiàn)為關系數(shù)據(jù)。內存中的對象之間存在關聯(lián)和繼承關系,而在數(shù)據(jù)庫中,關系數(shù)據(jù)無法直接表達多對多關聯(lián)和繼承關系。
因此,ORM系統(tǒng)一般以中間件的形式存在,主要實現(xiàn)程序對象到關系型數(shù)據(jù)庫數(shù)據(jù)的映射。ORM與數(shù)據(jù)庫的對應關系如圖5.2所示。
二、認知 ORM
對象關系映射(Object Relational Mapping,ORM)是一種程序設計技術,用于實現(xiàn)面向對象編程語言里不同類型系統(tǒng)的數(shù)據(jù)之間的轉換。從效果上說,它其實是創(chuàng)建了一個可在編程語言里使用的“虛擬對象數(shù)據(jù)庫”。
面向對象是在軟件工程的基本原則(如耦合、聚合、封裝)基礎上發(fā)展起來的,而關系數(shù)據(jù)庫則是從數(shù)學理論發(fā)展而來的,兩套理論存在顯著的區(qū)別。為了解決這個不匹配問題,ORM技術應運而生。
三、數(shù)據(jù)庫和對象的映射關系
- 數(shù)據(jù)表(table)----> 類(class)
- 數(shù)據(jù)行(record,也稱為記錄)----> 對象(object)
- 字段(field)----> 對象的屬性(attribute)
舉個例子:
下面是SQL語句:
寫成ORM
data = Book.query.all()四、優(yōu)缺點
.優(yōu)勢
第一:隱藏了數(shù)據(jù)訪問細節(jié),“封閉”的通用數(shù)據(jù)庫交互,ORM的核心。他使得我們的通用數(shù)據(jù)庫交互變得簡單易行,并且完全不用考慮該死的SQL語句。快速開發(fā),由此而來。第二:ORM使我們構造固化數(shù)據(jù)結構變得簡單易行。在ORM年表的史前時代,我們需要將我們的對象模型轉化為一條一條的SQL語句,通過直連或是DB helper在關系數(shù)據(jù)庫構造我們的數(shù)據(jù)庫體系。而現(xiàn)在,基本上所有的ORM框架都提供了通過對象模型構造關系數(shù)據(jù)庫結構的功能。這,相當不錯。缺點
第一:無可避免的,自動化意味著映射和關聯(lián)管理,代價是犧牲性能(早期,這是所有不喜歡ORM人的共同點)。現(xiàn)在的各種ORM框架都在嘗試使用各種方法來減輕這塊(LazyLoad,Cache),效果還是很顯著的。第二:面向對象的查詢語言(X-QL)作為一種數(shù)據(jù)庫與對象之間的過渡,雖然隱藏了數(shù)據(jù)層面的業(yè)務抽象,但并不能完全的屏蔽掉數(shù)據(jù)庫層的設計,并且無疑將增加學習成本.第三:對于復雜查詢,ORM仍然力不從心。雖然可以實現(xiàn),但是不值的。視圖可以解決大部分calculated column,case ,group,having,order by, exists,但是查詢條件(a and b and not c and (d or d))。五、常用的 ORM 庫
Python中提供了非常多的ORM庫,一些ORM庫是框架特有的,還有一些是通用的第三方包。雖然每個ORM庫的應用領域稍有不同,但是它們操作數(shù)據(jù)庫的理論原理是相同的。
下面列舉了一下常用的Python ORM框架。
- Django ORM:Django是一個免費、開源的應用程序框架,它的ORM是框架內置的。由于Django的ORM和框架本身結合太緊密了,所以不推薦脫離Django框架使用它。
- SQLAlchemy:一個成熟的ORM框架,資源和文檔都非常豐富,大多數(shù)Python Web框架對其都有很好的支持,能夠勝任大多數(shù)應用場合。
- Peewee:一個輕量級的ORM。Peewee基于SQLAlchemy內核開發(fā),整個框架由一個文件構成。Peewee更關注極簡主義,具備簡單的API以及容易理解和使用的函數(shù)庫。
- Storm:一個中型的ORM庫。它允許開發(fā)者跨數(shù)據(jù)庫構建復雜的查詢語句,從而支持動態(tài)地存儲或檢索信息。
MVC
什么是MVC
MVC 模式(Model–view–controller)是軟件工程中的一種軟件架構模式,它把軟件系統(tǒng)分為三個基本部分:模型(Model)、視圖(View)和控制器(Controller)。
MVC 模式的目的是實現(xiàn)一種動態(tài)的程序設計,簡化后續(xù)對程序的修改和擴展,并且使程序某一部分的重復利用成為可能。除此之外,MVC 模式通過對復雜度的簡化,使程序的結構更加直觀。軟件系統(tǒng)在分離了自身的基本部分的同時,也賦予了各個基本部分應有的功能。專業(yè)人員可以通過自身的專長進行相關的分組:
- 模型(Model):程序員編寫程序應有的功能(實現(xiàn)算法等等)、數(shù)據(jù)庫專家進行數(shù)據(jù)管理和數(shù)據(jù)庫設計(可以實現(xiàn)具體的功能);
- 控制器(Controller):負責轉發(fā)請求,對請求進行處理;
- 視圖(View):界面設計人員進行圖形界面設計。
MVC模式中三個組件的詳細介紹如下:
模型(Model):用于封裝與應用程序的業(yè)務邏輯相關的數(shù)據(jù)以及對數(shù)據(jù)的處理方法。“Model”有對數(shù)據(jù)直接訪問的權力,例如對數(shù)據(jù)庫的訪問。“Model”不依賴“View”和“Controller”,也就是說, Model 不關心它會被如何顯示或是如何被操作。但是 Model 中數(shù)據(jù)的變化一般會通過一種刷新機制被公布。為了實現(xiàn)這種機制,那些用于監(jiān)視此 Model 的 View 必須事先在此 Model 上注冊,由此,View 可以了解在數(shù)據(jù) Model 上發(fā)生的改變。(比如:觀察者模式(軟件設計模式));
視圖(View):能夠實現(xiàn)數(shù)據(jù)有目的的顯示(理論上,這不是必需的)。在 View 中一般沒有程序上的邏輯。為了實現(xiàn) View 上的刷新功能,View 需要訪問它監(jiān)視的數(shù)據(jù)模型(Model),因此應該事先在被它監(jiān)視的數(shù)據(jù)那里注冊;
控制器(Controller):起到不同層面間的組織作用,用于控制應用程序的流程。它處理事件并作出響應。“事件”包括用戶的行為和數(shù)據(jù) Model 上的改變。
從MVC模式的一般理解來看,視圖層與模型層是存在直接聯(lián)系的,并且模型層的變化會通過視圖層反映出來,這確實是MVC模式的標準理解,不過在我目前接觸到的實際應用中,更多的情況時,視圖層與模型層是通過控制層聯(lián)系起來的,兩者之間并無直接的聯(lián)系,三者之間的關系更類似下圖所示:
模板引擎
了解模板引擎:模板引擎(用于Web開發(fā))是為了使用戶界面與業(yè)務數(shù)據(jù)(內容)分離而產生的,它可以生成特定格式的文檔,用于網站的模板引擎就會生成一個標準的HTML文檔。
總結
以上是生活随笔為你收集整理的ORM MVC、模板引擎介绍(建议收藏)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: FastAPI ------框架基础
- 下一篇: 大数相乘(c语言/c++)