浅谈MVC共通架构 -- Laravel、Django、ASP.NET MVC

前言

最近常看到一些IT帮友提出 MVC 架构的问题,笔者刚好接触过 Laravel、Django、ASP.NET MVC 三种架构,将研读心得整理如下,希望对初学者有些帮助。

Laravel:PHP 的主流架构Django:Python 的主流架构ASP.NET MVC:微软官方架构

何谓 MVC

MVC架构主要是提供系统开发者一个物件导向(OOP)、模组化的架构,将程式清楚切割,分离商业逻辑、路由、资料库定义/存取、网页内容,通常是放到不同的档案,大多是以单一类别呈现,这样,后续承接者要为维护就简单多了:

要改商业逻辑就到 Controller 修改要改变网页内容就到 View 修改资料库变更就修改 Model 定义
这样是不是很清楚呢?

MVC是 Model、View、Controller 的缩写,也就意谓它是上述三部分组成的,请参考架构图,个别的职责如下:
http://img2.58codes.com/2024/20001976w7cvxyECd9.png

Controller 是 MVC 架构的中枢,它负责以下工作:使用者输入的URL,透过路由(Routing)的定义,MVC架构会将Request送给一个Controller处理。透过 Model 存取资料库,并整理成 View 所需要的内容,通常包括一个类别或类别阵列(Array/List)。指定要送给浏览器的View,同时将 View 所需要的内容,打包送出。View的表单触发的get/post,透过路由(Routing)的定义,MVC架构会将Request送给一个Controller处理。Model:通常与资料库对应,每个资料表对应一个Model类别,操作类别的新增、修改、删除、查询,就会直接更动资料库,这就是所谓的ORM(Object-Relational Mapping),每个 MVC 架构都会提供他们独有的ORM,例如:Laravel:Eloquent ORMDjango:Django ORMASP.NET MVC:Entity framework

可以在Model类别中定义函数来操作Model,例如新增、修改、删除、查询,这样,controller 呼叫时会更方便;更进一步,可以定义 View Model,资料来源来自多个资料表,并定义複杂的商业逻辑在其中。

另外,很重要的一点,我们通常会用 Foreign Key 关联资料表,在Model中,会以类别中的属性来串连,这样,我们操作多各表的新增、修改、删除、查询,就会变得非常简单,很多人都会忽略Foreign Key的重要性,在资料库中都省略这方面的定义,致使ORM功能只发挥了一半。

View:就是使用者介面(User Interface),通常是网页内容,包括 HTML、CSS、Javascript,除了静态的内容,我们还会呈现资料库的查询结果,这时我们就要一个机制,来接收 Controller 的资料,每个 MVC 架构都会提供特定的语法来支援这方面的功能:Laravel:BladeDjango:jinja2ASP.NET MVC:Razor
特定的语法会包括样板(Template)、简单的逻辑判断,嵌入在网页内,例如Laravel/Django:
<html>    <body>        <h1>Hello, {{ $name }}</h1>    </body></html>

{{ $name }} 就代表 Controller 传来的 $name 变数值。

ASP.NET MVC 则以 Model.name 表示。

另外,View 通常会提供 for 迴圈来呈现阵列的内容,例如 ASP.NET MVC:

<ul>    @foreach (var item in Model.Foos){    <li>@item.Bar</li>}</ul>

另外,View 也会提供页面继承或母版网页的功能,以方便每个网页共用选单及标题,不须每一页都重覆定义选单及标题。

MVC架构支援的工具

如果要程式设计师每一个页面都要从头分别撰写View及Controller,每一个资料表都要同时在资料库定义一遍,并在程式中定义一个类别,那反弹一定很大,所以每个MVC架构都会提供工具自动产生框架(Scaffold),即标準的格式,你只要其中填入实质的内容即可,这样不仅省事,也减少打字错误(Typo),Laravel、Django提供指令式的介面(Command Line Interface, CLI),ASP.NET MVC 则以选单的方式导引程式设计师。

Laravel:php Artisan ...Django:python manage.py ...

结语

MVC的架构开发方式已是目前的主流,千万不要再用直球对决,这里只简单介绍MVC一般概念,希望对初学者有一丝丝的帮助。


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章