因為先學了三層,後學MVC,感覺腦袋裡面在打架啊,怎麼辦?

時間 2021-06-02 09:04:34

1樓:Gollum

作為乙個.net開發者說一下我個人的觀點

根據專案大小決定使用吧.

三層也可以理解為業務邏輯,檢視和實體

如果mvc和三層結合就是三層中的檢視層使用mvc來實現.這個時候,只需要知道mvc中的Controller和Model都是對於view頁面實現就可以.

當然乙個mvc即使不做任何抽離也可以完成乙個B/S的開發不過只是比較侷限性.

再補充一點,三層如果當作一種思想就好多了.如A服務提供介面,主要是業務邏輯的實現(看作業務層)B服務提供介面完成資料整合及儲存,為A提供服務(可以看作資料層)C提供檢視服務,直接提供給使用者,呼叫A服務,哪怕是用html+js呼叫(可以看作為檢視層)

2樓:eechen

個人認為三層架構跟MVC應該是一一對應的.

業務邏輯層對應控制器(Controller)

資料訪問層對應資料模型(Model)

介面表示層對應檢視(View)

MVC的目的就是為了分離介面和邏輯.

MVC:頁面控制器,載入資料模型,渲染檢視模板.

頁面控制器(Page Controller) 比前端控制器(Front Controller) 更適合PHP,因為乙個URL請求就可以對應到乙個PHP檔案.兩者具體區別可以參考MSDN文件:

Front Controller 比 Page Controller 更複雜,

實現此解決方案會增加維護成本和新手的學習難度。

Front Controller 是用來處理 Web 應用程式的所有請求的單個控制器。

如果處理程式必須執行資料庫查詢或 XML 文件查詢才能作出路由決定,則可能導致效能非常緩慢。

Page Controller 模式是比 Front Controller 更簡單的替代方案。

在 Page Controller 模式中,每個頁面各有乙個控制器物件,

這與所有請求使用乙個物件的 Front Controller 方案相反。

對於大多數應用程式來說,Page Controller 是更合適的起點。

僅當需要 Front Controller 時才應該使用它。

比如下面是管理後台的乙個文章模型的PHP頁面控制器的CRUD實現:

<?

phpdefine

('IO_ROOT'

,__DIR__

.'/..'

);//定義入口常量

require

IO_ROOT

.'/include/common.php'

;//載入公共控制器if(

!isset

($_GET

['action'

]))switch

($_GET

['action'

])// 檢查CSRFif(

!io_check_csrf

($io

['base_url'].

'/admin/post.php?action=create'

))// 插入文章if(

!io_post_create

())$data

=array

('status'

=>0);

echo

json_encode

($data

);exit

();}

echo

io_render

('post_create.php'

,'admin'

);exit

();}

// /admin/post.php?action=read&id=1024

case

'read'

:// /admin/post.php?action=update&id=1024

case

'update':if

(!io_check_csrf

($io

['base_url'].

'/admin/post.php?action=update'

))if(!

io_post_update

($_GET

['id'

]))$data

=array

('status'

=>0);

echo

json_encode

($data

);exit

();}if(

!isset

($_GET

['id'

]))exit

();$io

['data']=

io_post_read

($_GET

['id'

]);echo

io_render

('post_update.php'

,'admin'

);exit

();}

// /admin/post.php?action=delete&id=1024

case

'delete':if

(!io_check_csrf

($io

['base_url'].

'/admin/post.php?action=delete'

))if(!

io_post_delete

($_GET

['id'

]))$data

=array

('status'

=>0);

echo

json_encode

($data

);exit

();}

exit

();}

// /admin/post.php?action=index

case

'index'

:default:}

/*io_post_create()

io_post_read()

io_post_update()

io_post_delete()

io_post_index()

上述這些函式就是對文章這個資料模型的操作,可以歸為"資料訪問層".

用PDO+SQL即可完成這一層的操作:

$stmt = $db->prepare($sql);

$stmt->execute($params);

io_render() 函式用於渲染模板,可以歸為"介面表示層".

/admin/content/theme/default/post_create.php

/admin/content/theme/default/post_read.php

/admin/content/theme/default/post_update.php

/admin/content/theme/default/post_index.php

渲染模板函式實現也很簡單,比如:

ob_start();

require $template;

return ob_get_clean();*/

三層構架和 MVC 不同嗎?

yaoyao 先說答案 完全不同!因為這兩者完全就不是在同乙個維度上的解決方案。MVC是客戶端的一種設計模式,所以他天然就不考慮資料如何儲存的問題。作為客戶端,只需要解決使用者介面 互動和業務邏輯就好了。在MVC模式中,View負責的是使用者介面,Controller負責互動,Model負責業務邏輯...

三層實木地板怎麼選擇?

兔寶寶 兔寶寶三層實木地板 第一層歐洲橡木鋸切錶板年輪的印記是藝術更是成長淡雅耐磨歲月的喧囂與恬靜我都陪你一起走下去 第二層加拿大松木 SPF 芯板真 芯 不懼考驗耐寒抗壓,一 穩 定真情任四季變幻 第三層俄羅斯松木背板特殊工藝打造防霉控水百年威林格5G鎖扣精工開槽嚴密無聲無需釘裝不留痕跡一滑 一按...

三層別墅有必要裝電梯嗎

丁春秋 沒有電梯的別墅住了三年,有電梯的別墅住了近兩年。我覺得我還是有發言權的。強烈建議別墅安裝電梯,舉個例子,比如洗衣籃滿滿一籃子衣服從負一樓的洗衣房爬樓拎到二樓臥室可是一力氣活兒。 房先生 1.看經濟能力 乙個三層別墅電梯在10萬元左右。一年維保費在5000左右。2.看家庭成員構成,是否有使用的...