PHP設計模式 六 MVC

2021-09-19 07:58:14 字數 2786 閱讀 4744

20世紀80年代,計算機發展迅速,程式設計技術也日益分化。桌面應用程式設計,也逐漸出現了使用者圖形介面和程式邏輯分離的程式設計。到了90年代,web的出現更是讓這種程式設計模式得以延續。

這種設計模式便是mvc(model-view-control),除了mvc,還有mvc的變種,如mvvm(model-view-view model)等。

回到80年代的桌面應用程式設計,當時物件導向的程式設計設計模式(見php設計模式(一):基礎程式設計模式)興起,程式設計師將桌面應用分割成兩個大的物件:領域物件(domain objects)和可視物件(presentation objects)。領域物件是對現實事物的抽象模型,可視物件是對使用者介面部分的抽象模型。

後來人們發現,只有領域物件和可視物件是不夠的,特別是在複雜的業務中。根據php設計模式(三):封裝中介紹的設計原則,在物件導向程式設計中,類和類之間的訪問、互動和更新應該是通過accessors和mutators。

那麼如果操作領域物件呢?人們引入了控制器(controller)的物件,通過控制器來操作領域模型。

到此,mvc模型逐漸穩定下來,使用者通過可視物件操作控制器物件,控制器物件再去操作領域物件。

上面介紹的mvc屬於抽象度比較高的設計模式,在實際程式設計中,需要遵守下面的設計模式。

基於介面去程式設計的好處就是分離設計和實現,這一點我們在php設計模式(二):抽象類和介面已經介紹過了,下面我們舉乙個實際的例子來說明這個設計的好處。

<?php

abstract class animal

if ($this->eatmoss())

}}?>

我們建立乙個鯨魚類:

<?php

include_once('animal.php');

class whale extends animal

public function eatfish()

public function eatmoss()

}$whale = new whale();

$whale->eat();

?>

執行一下:

$ php whale.php

whale eats fish.

看上去沒什麼問題,對吧?我們建立乙個鯉魚類:

<?php

include_once('animal.php');

class carp extends animal

public function eatmoss()

}$carp = new carp();

$carp->eat();

?>

執行一下:

$ php carp.php

php fatal error: class carp contains 1 abstract method and must therefore be

declared abstract or implement the remaining method (animal::eatfish) in

carp.php on line 9

報錯了,對吧?因為我們實現carp.php的時候故意沒有去實現eatfish介面,基於介面的程式設計設計模式可以在開發期就發現這種邏輯錯誤。

將乙個物件拆成更小的物件,這些小的物件成為元件(composition)。盡量使用元件而不是繼承的設計模式的意義在於,多種繼承之下,子類可能會擁有大量毫無意義的未實現方法。而通過元件的方式,子類可以選擇需要的元件。

下面給出乙個例子:

<?php

abstract class animal

if ($this->eatmoss())

}}class whale extends animal

protected function eatfish()

protected function eatmoss()

}class bullwhale extends whale

public function getgender()

}?>

這裡的bullwhale其實非常冗餘,實際的業務模型可能並不需要這麼複雜,這就是多重繼承的惡果。

而元件則不同,通過將行為拆分成不同的部分,又最終子類決定使用哪些元件。

下面給出乙個例子:

<?php

class action

public function eat($food)

}class gender

public function getgender()

}class bullwhale

public function eatfood($food)

public function getgender()

}$bullwhale = new bullwhale();

$bullwhale->eatfood("fish");

echo $bullwhale->getgender() . "\n";

?>

執行一下:

$ php bullwhale.php

bill whale eat fish.

male

bullwhale由action和gender元件構成,不同的類可以選擇不同的元件組合,這樣就不會造成類冗餘了。

實際程式設計中,更多的往往是混合架構,如既包含繼承,又包含元件的程式設計設計模式。不過,掌握基本的程式設計架構設計是一切的基礎。

php的mvc設計模式,什麼是MVC設計模式?,

詳細內容 model view controller簡稱mvc,即模型檢視控制器。mvc設計模式指定應用程式由資料模型 呈現資訊和控制資訊組成。該模式要求將每個模式分成不同的物件。mvc更像是一種架構模式,但並不適用於完整的應用程式。mvc主要與應用程式的ui 互動層有關。你仍然需要業務邏輯層,可能...

MVC設計模式

mvc本來是存在於desktop程式中的,m是指資料模型,v是指使用者介面,c則是控制器。使用mvc的目的是將m和v的實現 分離,從而使同乙個程式可以使用不同的表現形式。比如一批統計資料你可以分別用柱狀圖 餅圖來表示。c存在的目的則是確保m和v的同步,一旦m改變,v應該同步更新。模型 檢視 控制器 ...

MVC設計模式

準確的說,mvc不是一種設計模式,而是更高的構架模式。它是model view controller的縮寫,最早是由xerox 施樂 提出的。隨後,它成為了一種著名的使用者介面設計架構。在mvc經典架構中,它把應用程式 也可以看做是應用程式的乙個模組 分 三個部分 1.模型 模型代表了該應用程式的核...