第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在不丟失SQL請求時間/服務(wù)器內(nèi)存的情況下用PHP / MySQL實(shí)現(xiàn)良好的MVC模式?

如何在不丟失SQL請求時間/服務(wù)器內(nèi)存的情況下用PHP / MySQL實(shí)現(xiàn)良好的MVC模式?

PHP
慕尼黑8549860 2021-03-31 13:15:36
我想為我的php控制器實(shí)現(xiàn)一個真正的模式MVC。特別是,我想通過在PHP(用于業(yè)務(wù)組織的對象)中創(chuàng)建等效的Java“ bean”和使用這些業(yè)務(wù)對象的API來拆分模型和API。例如,我的基本對象是會員。問題是:我在哪里請求數(shù)據(jù)庫?我是否在__construct上要求所有成員的屬性,并且只使用getter訪問它們,或者在__construct中什么也不做,并且在每個getter函數(shù)中調(diào)用數(shù)據(jù)庫?人們告訴我,第一種解決方案更好,但是,如果我只想在控制器中提供特定信息,我將創(chuàng)建一個Member,其中包含在構(gòu)造時就計算出的所有信息(錯誤的內(nèi)存管理)。在第二種情況下,如果我想要幾個成員屬性,我將執(zhí)行幾個SQL請求,這將增加服務(wù)器執(zhí)行時間。第一種解決方案:public function __construct($ID_membre,$sql){    $this->ID_membre = $ID_membre;    $res = mysql_get("select * from membres where ID_membre = $ID_membre",$sql);    if(!$res)        throw new Exceptions\MyDefaultException("no member for this Id");    $this->firstName = $res['first_name'];    $this->lastName = $res['last_name'];    $this->mail = $res['mail'];    $this->gender = $res['gender'];    // ....    $this->sql = $sql;}public function getLastName(){    return $this->lastName;}public function getMail(){    return $this->mail;}public function getGender(){    return $this->gender;}// .... 第二解決方案:public function __construct($ID_membre,$sql){    $this->ID_membre = $ID_membre;    $res = mysql_get("select count(*) from membres where ID = $ID_membre",$sql);    if($res == 0)        throw new Exceptions\MyDefaultException("no member with this id");    $this->sql = $sql;}public function getLastName(){    mysql_get("select name from members where ID = {$this->id}",$this->sql);    return $this->lastName;}public function getMail(){    mysql_get("select mail from members where ID = {$this->id}",$this->sql);    return $this->mail;}public function getGender(){    mysql_get("select gender from members where ID = {$this->id}",$this->sql);    return $this->gender;}在這種情況下,控制器中良好的舊SQL自定義請求非常適合不浪費(fèi)時間或內(nèi)存,因?yàn)樗鼈兪橇?xí)俗。那么,為什么今天這樣的請求被如此糟糕地看待呢?并且,如果Fb或Google這樣的大型組織使用數(shù)據(jù)庫進(jìn)行MVC,那么在拆分模型和控制器時如何不浪費(fèi)任何時間/內(nèi)存呢?
查看完整描述

1 回答

?
慕尼黑5688855

TA貢獻(xiàn)1848條經(jīng)驗(yàn) 獲得超2個贊

這是一個經(jīng)典的問題,如果您想要多個成員的一個屬性,甚至?xí)兊酶恪?/p>

標(biāo)準(zhǔn)答案是解決方案1更好。從數(shù)據(jù)庫中請求一行不會比從數(shù)據(jù)庫中請求一個值花費(fèi)更長的時間,因此一次請求整行是有意義的。那是除非您的數(shù)據(jù)庫行變得很大。但是,在良好的數(shù)據(jù)庫設(shè)計中不應(yīng)發(fā)生這種情況。如果您的行太大,以至于妨礙了效率,那么可能是時候拆分表了。

現(xiàn)在回到我在此答案開頭提到的問題。您還沒有解決這個問題。我的建議是制作兩類:一種解決方案1,處理一行,另一種解決方案2,處理多行。

因此,這兩種解決方案都有自己的位置,只是解決方案2幾乎總是無法處理一行,而且我什至沒有談到它所需的額外編碼量。


查看完整回答
反對 回復(fù) 2021-04-23
  • 1 回答
  • 0 關(guān)注
  • 132 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號