天天看點

用 JAX-RS 和 JSR 371 規範設計一個 MVC 架構(一)開篇

最近做幾個項目都是 SSM 的,也就是 Spring MVC + MyBatis。Spring MVC 不是說不好,而是覺得整個 Spring 架構太重了,而且受架構限制遇到一些小 case 也不好處理(想着這麼順應或“突破”架構的限制,——有時“原生的”反而好寫出來),是以從這一點認知出發,最後決定自己寫一個 MVC 架構!而設計的目标就是——提供一個最簡單最小巧的 MVC 架構,花哨的功能一個不要,越簡潔越好。花了2天左右時間完成,目前運作良好。

話說大家熟悉的這個 MVC,想必感觸良多,Java 所津津樂道的 MVC 架構自打 Struts 開始,從 WebWork 到 Spring MVC 等等都是鼎鼎大名的,如果更細化的表示層模版諸如 Velocity、Tapestry、FreeMaker 更是層出不窮。不過在 AJAX 和 RESTful 接口大行其道的今天,服務端渲染 UI 似乎有所“低調”。于是近幾年 MVC 中的 “View” 在服務端并無甚長足發展,連官方的 JSF 也漸有銷聲落寞的意味。是以我就在想,表示層僅僅簡單的 JSP + JSTL 就夠了,把複雜酷炫的界面就留給 H5 吧。

Model 這一層,社群的争議聲不大。反正就是一個 Bean,或者 POJO 就可以了。當然你可能覺得沒那麼簡單,好比說什麼 DTO、VO 等等諸如此類的都屬于 Model 意義的推廣。大道至簡,從結構上我們可以通過 Map 來表征此類抽象(當然也有人把 Model 取消,資料庫傳回的資料通通用 Map 表示)。

Controller 層正是本文的重點。之前的控制器是要把資料渲染到模版的——現在也是要,但卻會簡單許多——我說的是 API 接口的方式提供資料。因而 RESTful 方式就很重要了。究其實質,就是怎麼把 HTTP URL 的請求與 Java 面向對象的方法對應起來。這樣的思路會簡單許多,也會自然許多。說點帶有個人情緒的話題,在 2016 年的今天研究 MVC,确實有點落伍了。人家的架構的一大堆,個個功能都牛逼烘烘,為啥你還要做輪子呢?——哎,我從 MS ASP 就搞 Web,認死了一條路,不搞好它我就不甘心、不到黃河心不死!當然不是我說能搞的有多好。但我對我自己說,能夠把代碼在充分可控的範圍内,我就舒坦了——本人就是這麼覺得的哦!

補充一點,實際情形的系統不會僅僅有 M、V、C 這三種對象這麼簡單。還有 Service、DAO 層的,但與 MVC 概念并不沖突。

最後說說,所謂 Web 架構,到底搞的對象是什麼!?鄙人認為,先決條件有以下兩點,隻有徹底了解這兩點之後,才能做得好的 Web 架構,不然就是“在浮沙築高樓”!

HTTP 協定

緊扣 Request、Response 兩大基礎對象,明白鍊式結構是如何傳遞的

好吧,Let's go, GO GO~~~

另外提一下,環境是采用 Jave EE 版的 eclipse 開發,項目工程是一個 Dynamic web project,采用了 Servlet 3 的一些特性,JDK 要求 v1.7 及以上。

鄙人的這個 MVC 架構,功能簡單,但是 MVC 的核心功能基本具備了,很适合想了解 MVC 的學習者。