Python模型—視圖—控制器——複合模式

MVC不僅是一種實現用戶界面的軟件模式,同時也是一種易於修改和維護的架構。MVC模式將應用程序分爲3個基本部分:模型、視圖和控制器。這3個部分使相互關聯的,並且有助於將信息的處理與信息的呈現分離開來。

MVC模式的工作機制爲:模型提供數據和業務邏輯,視圖負責數據的展示,而控制器是兩者之間的粘合劑,根據用戶要求的呈現方式來協調模型和視圖。有趣的是,視圖和控制器依賴於模型,而不是反過來。這主要是因爲用戶所關心的是數據。模型是可以獨立工作的,這是MVC模式的關鍵所在。

MVC模式的主要意圖如下:

1、將數據和數據的展示隔離開來

2、使類的維護和實現更加簡單

3、靈活地改變數據的存儲和顯示方式。兩者都是獨立的,因此可以靈活修改。

模型

模型是應用程序的基石,因爲它是獨立於視圖和控制器,而視圖和控制器則依賴於模型

模型還提供客戶端請求的數據。通常,在應用程序中,模型有存儲和返回信息的數據庫來表示。模型會提供狀態以及改變狀態的方法,但他不知道數據是如何展示給客戶端的。

模型必須在多個操作中保持一致;否則,客戶端可能會損壞或展示過時的數據,這是無法容忍的。

由於模型是完全獨立的,所以,開發模型的人員可以專注於維護模型的本身,而無需關注視圖的最新變化

視圖

視圖用來將數據展示在接口上,供客戶查看。視圖可以獨立開發,但不應該包含任何負責的邏輯,因爲邏輯應該放在控制器或模型中。

在當今世界中,視圖需要足夠的靈活,並且應該適應多種平臺。

視圖應避免與數據庫直接交互,而是依靠模型來獲取所需的數據

控制器

控制器,顧名思義,就是控制用戶在界面上的交互。當用戶點擊界面上的某些元素時,基於對應的交互,控制器調用相應的模型,然後模型完成創建、更新或刪除數據等動作。

控制器還能將數據傳遞給視圖,以便將信息呈現在接口上,供用戶查看。

控制器不應該進行數據庫調用或參與數據的展示。控制器應該作爲模型和視圖之間的粘合劑。

 

下面用Python實現一個MVC設計模式。假設我們相要開發一個應用程序,告訴用戶雲公司所提供的營銷服務,包括的電子郵件、短信和語音設施。

我們首先開發model類(模型),定義產品提供的服務和費用;

然後定義view類(視圖),它提供了將信息反饋給客戶端的方法;

接下來,定義Controller類,這個類定義了兩個方法,即get_services()和get_pricing()。這兩個方法都是用來查詢模型並獲取數據的,然後將數據饋送到視圖,從而展示給用戶;

Client類將實例化控制器,然後控制器對象就會根據客戶端的請求來調用適當的方法:

class Model(object):
    services = {
        'email': {'number': 1000, 'price': 2},
        'sms': {'number': 1000, 'price': 10},
        'voice': {'number': 1000, 'price': 15},
    }


class View(object):
    def list_services(self, services):
        for svc in services:
            print(svc, " ")

    def list_pricing(self, services):
        for svc in services:
            print("For", Model.services[svc]['number'],
                  svc, "message you pay $",
                  Model.services[svc]['price'])


class Controller(object):
    def __init__(self):
        self.model = Model()
        self.view = View()

    def get_services(self):
        services = self.model.services.keys()
        return self.view.list_services(services)

    def get_pricing(self):
        services = self.model.services.keys()
        return self.view.list_pricing(services)


class Client(object):
    con = Controller()
    print("Services Provided:")
    con.get_services()
    print("Pricing for Services:")
    con.get_pricing()

我們的web應用程序框架也是基於MVC的優秀理念的,例如django都是以模型-視圖-控制器格式來構造項目的,只是形式是模型、模板、視圖(MTV)其中模型是數據庫,模板是視圖,控制器是視圖/路由;所以就不在列舉真實的例子了

MVC的優點

1、使用MVC,開發人員可以將軟件應用程序分爲3個主要部分:模型、視圖和控制器。這有助於提高可維護性,強制鬆耦合,並降低複雜性。

2、MVC允許對前端進行獨立更改,而對後端邏輯無需任何修改或只需要進行很少的更改,因此開發工作仍可以獨立運行;類似的可以更改模型或業務邏輯,而無需對視圖進行任何修改;可以更改控制器,而不會對視圖或模型造成任何影響;

3、MVC還有助於專業的人員做專業的事情

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章