iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 6
2
Modern Web

跨平台開發利器- ASP.NET Core 系列 第 6

(Day 6) ASP.NET Core專案架構 上篇

6.1 MVC,多少人假汝之名為惡

  在前幾天討論Visual Studio的發展歷史時,談到MVC的發展。
  MVC是在1980年代一套命名為SmallTalk的程式語言中出現的系統架構。
  早期,MVC的理論興起主要是因為大型軟體專案的需要一套更為嚴格的分工規劃,於是讓畫面(View)留給處理畫面的團隊,讓資料庫(Model)留給資料庫管理團隊,讓資料控制(Control)留給控制器編寫團隊, 大家分工一起完成軟體專案。在歷史上,第一套能支援MVC架構的軟體開發的Framework,是微軟的MFC,可是MFC只支援了一半,Control有一半在VIew中,一部份在Model中,還一獨立的一小部份,比較嚴謹的說法是CView, CDocument兩大塊構成的MFC,Document就相當於Model。但MFC還不是真正的MVC架構,只是很像。
  接下來就是Java的興起,Java本身就是具備MVC架構雛型旳程式語言,在Java發的歷史中,有個叫Swing的Java程式整合式開發工具出現,Swing就是完全的MVC架構,以Java語言為基礎實現MVC架構的開發模式,可惜Swing有如曇花一現,並沒有在市場中造成多大的風波與影響,因為PHP和如雨後春荀群出的Javascript Library/Framework,讓系統開發人員目不暇給,到今天,PHP開發環境還是會經常聽到Laravel、Vue.js、Angular學那一套或是那一套比較有前途的討論,而每年都還會選出十大常用PHP Framework的文章出現,只有一點要講的,PHP和那一大堆Framework,大多數都是以MVC架構為開發模式。
  如果硬是要談拉個親戚,ASP.NET也算是有MVC架構影子的開發語言,只是View和Control是混在一起不可分離,Model的部份其實只能做Database First的Model設計,一直到ASP.NET MVC的出現,才真正擺脫了之前的混沌時代, 正式邁入MVC架構的開發模式。
  ASP.NET Core繼承ASP.NET MVC,原生就有了MVC的架構。

6.2 ASP.NET Core的MVC架構

  我們從下圖開始來看,這是在前天我們用Visual Studio創建的一個新專案,在右手邊的[方案總管]小視窗,可以看到己經建建好的一個專案資料夾。
https://ithelp.ithome.com.tw/upload/images/20181011/20017649sOEUdCNKLs.png
  從資料夾結構就可以明顯看到Model,View,Controller的架構,我把這三個資料夾點開來,放大如下圖,各位可以看到更多的檔案在其中。
https://ithelp.ithome.com.tw/upload/images/20181011/20017649wk4gJXTVaA.png
6.3 Model

  我們先從Model談起因為View和Controller的關係比較密切,所以我先介紹Model這個第三者,明天再以完整篇幅來介紹View和Controller這對情人。
  ASP.NET Core的Model是建立在一套所謂Entity Framework的框架下的機制,Entity Framework是基於ADO.NET的一套開源的Object-Relational Mapping(ORM)的框架,也就是說,它是用來把ADO.NET轉型為Model架構的一套框架Entity Framework是ASP.NET Core專案裏的基本元件之一,建好專案,就可以使用了,我們可以在專案的[方案總管]小視窗裏的相依性下找到Microsoft.EntityFrameworkCore.Analyzers,這個就是Entity Framework的C#語法分析器。
https://ithelp.ithome.com.tw/upload/images/20181011/20017649BcXSv3s068.png
  談到Entity Framework,我們就一定要談到Database First或Model First的資料庫開發方式,Database First就是說先在資料庫中把資料表等元件建好,讓Model叫用建立專案中的Model檔案,Model First的意思是在專案中先把Model寫好,再利用Entity Framework連到資料庫把資料表等元件建起來。
  於是,你也知道,大家就選邊站了。有人擁護Database First,有人擁護Model First。然後為了那種方法比較優,在各Visual Studio論壇吵過一陣子。然後,微軟工程師們不甘寂寞,在Entity Framework 4.1時又提出了個Code First的名稱,於是兩大陣營又分列出支持Code First的碼農族群,就我所見,喜歡刻程式的多半使用Code First,喜歡傳統開發方式的,會使用Database FIrst先在資料庫中把元件建好,再到專案中用Entity Framework的功能把Model檔案建好。至於我,我是比較傾向於使用Database First。不為什麼,我是老一輩的傳統IT人,如而己。XD
  可是,市場傳聞,Entity Framework7.0版以後,將只會有Code First的方式,Database First和Model First都會消失,其實這是以訛傳訛,真正的驅勢是Code-Based Modeling,不管Database First或Model First,都還是會存在,真正消失的是中間產物EDMX這個用來建立資料庫模型的中間檔案。而Code First,其實一直是Database First和Model First共有一部份,Code First從來就不是它字面上的意思,但,造成誤解多年,微軟的工程師終於想到正名了。有興趣的邦友可以參考這篇文:EF7 – What Does “Code First Only” Really Mean。

  寫到這裏,今天就先談到這裏,抱歉技術成份目前還不多。


上一篇
(Day 5) 你知道軟體專案是怎麼開始的嗎?
下一篇
(Day 7) ASP.NET Core專案架構 下篇
系列文
跨平台開發利器- ASP.NET Core 30

1 則留言

0
海綿寶寶
iT邦大神 1 級 ‧ 2018-10-12 09:04:39

我個人對 MVC 的看法是
是一種系統開發的技術觀念架構
關鍵在於「開發人員」的心中
而不在「開發工具」上
/images/emoticon/emoticon13.gif
這點有點像 Object-Oriented
不是每個寫 Java/C++/C# 寫的就是物件導向設計
而就算你拿 LISP/SmallTalk 給我
我還是能把他寫成「誤見倒向」設計
/images/emoticon/emoticon05.gif
另外
文中 Java 的 Swing
也許是 Spring 之筆誤?
(來自 Struct/Spring 年代的人)
/images/emoticon/emoticon33.gif

看更多先前的回應...收起先前的回應...
賽門 iT邦超人 1 級 ‧ 2018-10-12 09:28:36 檢舉

我對 Java的認知是很初級的,比不上海綿寶寶的道行。
只能說是真的略懂。
Spring也是MVC架構,只是在出現時間點上,swing比 spring 早了幾年出現,所以我先提 swing, 也因這文是 ASP.NET主角,就沒再細數 Java 家珍了。
感謝海綿寶寶指正。

/images/emoticon/emoticon35.gif

SunAllen iT邦高手 1 級 ‧ 2018-10-12 13:52:19 檢舉

MVC是什麼/images/emoticon/emoticon19.gif

賽門 iT邦超人 1 級 ‧ 2018-10-12 20:40:16 檢舉

Model-Voew-Controller, 今天粗略介紹了Model(之後會不斷再討論Model),明天再談View和Controller

我要留言

立即登入留言