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.模型 模型代表了該應用程式的核...