Re: [心得] 談.net mvc
※ 引述《prag222 (prag)》之銘言:
: → atst2:想請教一下,mvc的pattern其實很早就有了,可是我看板上最近 08/06 20:01
: → atst2:似乎很多網頁相關的都會把這拿出來講,有點當成新東西的意思 08/06 20:01
: → atst2:在, 是以往網頁技術沒有用到MVC的pattern嗎?還是最近有什麼 08/06 20:02
: → atst2:特別的,關於MVC的新想法呢? 08/06 20:02
: → atst2:當然,即便以desktop app來說, MVC依軟體規模,也常變型為 08/06 20:06
: → atst2:MC-V or CV-M 的型式,不過概念上應該是不會有太多更動的. 08/06 20:07
: → atst2:過去的網頁技術,在實現MVC上有特別困難嗎?我還以為網頁 08/06 20:07
: → atst2:反而是最能體現MVC的部分呢... 08/06 20:08
: → atst2:所以這裡的MVC指的是某種實作MVC pattern的方式囉? 08/06 20:08
我突然想一想我發現這是值得討論的。
網頁的基本形式是,page base,
一個 url 的連接,兩個常見 http method 的實作 (get/post)。
如果有玩過cgi / servlet / 早期 php / asp(非.net),
應該對那種有個 output stream (response) 一路 write 到底的 AP很有印象。
web 上談 MVC 的複雜度在於
1.html 其實是 view 的東西,所以一開始沒注意就容易髒掉,
變成一邊寫 view 一邊撈資料,這點一直到有一個階段之後才開始改善。
以 asp 體系來講,從 asp.net 就開始拆 controller,
也有比較豐富的helper 來做這些事情,板友所講的 .net mvc ,
應該是 .net 3 還 3.5 以後才推出的新 pattern(吧)。
(歡迎勘誤,我實在有點久沒碰 .net 系列了。:P)
以 J2EE 體系來講,從早期的 java bean 實作到 jstl 等各taglib實作,
java bean 或 jstl 都還是比較接近 view base 的東西。
再到現在常見的 struts 這種先讀完資料再進行畫面的分配的作法。
以 PHP 體系來講,像是 CodeIgniter 這類的 solution就算是比較晚成的,
現在接受度也正在抬頭。
當然也有新興的語言/框架是直接就把這件事作進他們預設的工作流程,
像是 ROR 就是個預設的案例就希望你寫 controller 的作法。
2.寫網頁的時候哪些是 mvc 要討論的重點? mvc 對網頁適不適合?
這個就是大哉問了。
a.一般來講網頁至少有一件事情是mvc該作得,
我認為資料的讀取(m) 應該先於 view 的生成。 :P
也就是我個人比較喜歡 rails 或 struts 這類的 solution,
在進入到頁面之前,先進行純資料讀取的程序。
但因為網頁大多是由許多片段頁面互相 include 組裝而成,
所以這資料讀取的作法怎麼作比較有效率跟可再利用,並不容易。
b.controller 的角色定義明不明確
一般 AP 狀況下,controller 基本上應該連事件的處理等都處理,
但是 web app 因為 stateless ,
所以對事件的處理跟資料的保存有很大困擾。
i.controller 有人退守到 url base 的作法,
也就是透過特定路徑來進行特定操作,伺服器端只認 url 。
需要 client 互動的,就拆到 javascript 去做,
javascript 事實上也參與了 controller 的部份角色。
(這個應該是躲不掉,只是比例問題而已,
web 架構上 controller 先天就被切割成兩部份。 :( )
ii.透過特定的格式在每次 request 時保存狀態以達成事件操作
像 .net 的玩法就是預設透過 viewstate 保存狀態,
回到伺服器端的時候以此狀態來進行對應的事件操作。
其實就早期來講是蠻聰明的點子,因為對開發者負擔小,
對使用者來講討厭歸討厭,但是久了也就習慣了。
但現在由於網頁設計的多元化跟 javasript 的應用變多,
所以這樣的潮流也在順應時勢修改,
像是 ajax .net framework 就是個還算有趣的嘗試。
雖然我當時用 ajax .net framework 的想法是他受限於原本的框架,
所以用起來有很多有點彆扭或者意外的地方,好幾年過去了,
不知道現在有沒有好一點。:P
GWT 類的 solution 也差不多可以放在這裡,
另外 rails 也有提供 form helper 算是簡化這件事情,
基本上也就是走 restful 路線實作http method,只是有util幫忙。
iii.順帶一提,我現在公司的作法,對這件事情算是採取比較激進的態度,
我們把狀態放在 session ,用某些有效方式去管理他使他不leak,
以此為基礎來發展互動性較高的 controller 。
所有的事件基本上都是跟對應的 java object 去進行操作,
並封裝元件成為 server sdie 的類別,
對開發者來講可以相對較為輕鬆的透過 java 去進行開發。
就目前我所看到的案例來講,效果真的很不錯,而且元件再利用率也很高。
而當你真的需要寫 js的時候,可以把重點放在寫重要的 js ,
那種小的畫面切換,在伺服器端就可以有效處理這邏輯了。
c.對 template engine (view) 的不滿
考慮到資料模組的實現,html 對很多人來講是不夠用的,
所以舉凡 java/php 等,幾乎都有特化的 framework 試著處理這問題。
目前也都還在發展中。
-----------------------------------
MVC 的重點在於,對開發者來講,
你該認定的 M V C 三者的歸屬會在程式碼呈現出什麼樣子。
因為這是所謂的認同跟學習曲線,
而在於各 framework 跟語言怎麼實作 MVC 都還在各種嘗試的狀況下,
MVC 其實討論的是「這個 MVC 的形式合不合用」,而不是 MVC 本質上的概念。
事實上 MVC 本身的概念算是比較空泛的,他不是方法論,
而是比較偏設計原則的東西,在設計上也比較偏向於各自表述的作法。
--
I am a person, and I am always thinking .
Thinking in love , Thinking in life ,
Thinking in why , Thinking in worth.
I can't believe any of what ,
I am just thinking then thinking ,
but worst of all , most of mine is thinking not actioning...
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 12.208.243.66
推
08/06 20:53, , 1F
08/06 20:53, 1F
推
08/06 20:55, , 2F
08/06 20:55, 2F
→
08/06 20:56, , 3F
08/06 20:56, 3F
→
08/06 20:57, , 4F
08/06 20:57, 4F
→
08/06 20:57, , 5F
08/06 20:57, 5F
→
08/06 20:58, , 6F
08/06 20:58, 6F
→
08/06 20:58, , 7F
08/06 20:58, 7F
→
08/06 20:58, , 8F
08/06 20:58, 8F
→
08/06 20:58, , 9F
08/06 20:58, 9F
→
08/06 20:59, , 10F
08/06 20:59, 10F
推
08/06 20:59, , 11F
08/06 20:59, 11F
→
08/06 21:00, , 12F
08/06 21:00, 12F
→
08/06 21:01, , 13F
08/06 21:01, 13F
→
08/06 21:01, , 14F
08/06 21:01, 14F
→
08/06 21:02, , 15F
08/06 21:02, 15F
→
08/06 21:02, , 16F
08/06 21:02, 16F
→
08/06 21:02, , 17F
08/06 21:02, 17F
→
08/06 21:03, , 18F
08/06 21:03, 18F
→
08/06 21:03, , 19F
08/06 21:03, 19F
→
08/06 21:03, , 20F
08/06 21:03, 20F
→
08/06 21:04, , 21F
08/06 21:04, 21F
→
08/06 21:04, , 22F
08/06 21:04, 22F
→
08/06 21:04, , 23F
08/06 21:04, 23F
→
08/06 21:06, , 24F
08/06 21:06, 24F
→
08/06 21:07, , 25F
08/06 21:07, 25F
→
08/06 21:07, , 26F
08/06 21:07, 26F
→
08/06 21:07, , 27F
08/06 21:07, 27F
→
08/06 21:07, , 28F
08/06 21:07, 28F
→
08/06 21:08, , 29F
08/06 21:08, 29F
→
08/06 21:08, , 30F
08/06 21:08, 30F
→
08/06 21:08, , 31F
08/06 21:08, 31F
→
08/06 21:08, , 32F
08/06 21:08, 32F
→
08/06 21:09, , 33F
08/06 21:09, 33F
→
08/06 21:09, , 34F
08/06 21:09, 34F
→
08/06 21:09, , 35F
08/06 21:09, 35F
→
08/06 21:11, , 36F
08/06 21:11, 36F
→
08/06 21:11, , 37F
08/06 21:11, 37F
→
08/06 21:12, , 38F
08/06 21:12, 38F
→
08/06 21:12, , 39F
08/06 21:12, 39F
→
08/06 21:12, , 40F
08/06 21:12, 40F
→
08/06 21:13, , 41F
08/06 21:13, 41F
→
08/06 21:13, , 42F
08/06 21:13, 42F
→
08/06 21:13, , 43F
08/06 21:13, 43F
→
08/06 21:16, , 44F
08/06 21:16, 44F
→
08/06 21:16, , 45F
08/06 21:16, 45F
→
08/06 21:16, , 46F
08/06 21:16, 46F
→
08/06 21:16, , 47F
08/06 21:16, 47F
→
08/06 21:17, , 48F
08/06 21:17, 48F
→
08/06 21:19, , 49F
08/06 21:19, 49F
→
08/06 21:19, , 50F
08/06 21:19, 50F
→
08/06 21:20, , 51F
08/06 21:20, 51F
推
08/06 21:25, , 52F
08/06 21:25, 52F
→
08/06 21:26, , 53F
08/06 21:26, 53F
→
08/06 21:27, , 54F
08/06 21:27, 54F
→
08/06 21:27, , 55F
08/06 21:27, 55F
→
08/06 21:27, , 56F
08/06 21:27, 56F
→
08/06 21:27, , 57F
08/06 21:27, 57F
→
08/06 21:28, , 58F
08/06 21:28, 58F
→
08/06 21:28, , 59F
08/06 21:28, 59F
推
08/06 21:28, , 60F
08/06 21:28, 60F
→
08/06 21:28, , 61F
08/06 21:28, 61F
→
08/06 21:29, , 62F
08/06 21:29, 62F
推
08/06 21:37, , 63F
08/06 21:37, 63F
推
08/06 22:25, , 64F
08/06 22:25, 64F
→
08/06 22:26, , 65F
08/06 22:26, 65F
→
08/06 22:26, , 66F
08/06 22:26, 66F
→
08/06 22:31, , 67F
08/06 22:31, 67F
推
08/07 00:22, , 68F
08/07 00:22, 68F
推
08/07 23:01, , 69F
08/07 23:01, 69F
→
08/07 23:02, , 70F
08/07 23:02, 70F
→
08/07 23:03, , 71F
08/07 23:03, 71F
→
08/07 23:04, , 72F
08/07 23:04, 72F
→
08/07 23:04, , 73F
08/07 23:04, 73F
→
08/12 21:53, , 74F
08/12 21:53, 74F
→
08/13 14:44, , 75F
08/13 14:44, 75F
→
08/13 14:45, , 76F
08/13 14:45, 76F
→
08/13 14:46, , 77F
08/13 14:46, 77F
→
08/13 14:46, , 78F
08/13 14:46, 78F
討論串 (同標題文章)
本文引述了以下文章的的內容:
心得
10
86
以下文章回應了本文:
心得
13
105
完整討論串 (本文為第 2 之 6 篇):
心得
10
86
心得
9
78
心得
13
105
心得
10
23