“Model 1” 和 “Model 2”(譯)

原文:https://herbertograca.com/2018/08/29/model-1-model-2/

這篇文章是軟件架構(gòu)編年史()的一部分,這部編年史由一系列關(guān)于軟件架構(gòu)的文章組成。在這一系列文章中,我將寫下我對軟件架構(gòu)的學習和思考,以及我是如何運用這些知識的。如果你閱讀了這個系列中之前的文章,本篇文章的的內(nèi)容將更有意義。

JSP 是這樣一種技術(shù),它是可以與 PHP、ASP 或是 Python 比肩的腳本語言,用來創(chuàng)建服務(wù)端的頁面,這些頁面由 JVM 解釋,可以使用 Java 對象。

最早的 JSP 規(guī)范,于 1998 年由 Sun Microsystems 發(fā)布,定義了兩種組織應(yīng)用結(jié)構(gòu)的方式,因此,展現(xiàn)邏輯能夠以 HTTP 請求/響應(yīng)范式和業(yè)務(wù)邏輯甚至用例解耦。

有人認為 “Model 1” 和 “Model 2” 是最早將原本為桌面軟件開發(fā)上下文而生的 MVC 模式應(yīng)用到網(wǎng)絡(luò) HTTP 請求/響應(yīng)范式的嘗試。

Model 1

第一份 JSP spec. v0.92 提案,只是將 JSP 僅用作展現(xiàn)層的制品,它將包含全部展現(xiàn)層和用例邏輯。

“Model 1” (JSP spec. v0.92)

這種方法對大多數(shù)當時的用例來說已經(jīng)足夠好了,因為那時大部分 Web 都是由簡單的動態(tài)頁面組成,而不是用我們現(xiàn)在所了解的復雜 Web 企業(yè)應(yīng)用組成。

Model 2

第二份關(guān)于如何使用 JSP 的提案是為了那時所謂的復雜 Web 應(yīng)用。但是,請記住,現(xiàn)在的 Web 應(yīng)用的規(guī)模和復雜性要高得多。

|
“Model 2” (JSP spec. v0.92)

在 “Model 2” 中,一個 HTTP 請求將抵達一個 Servlet;它會解釋 HTTP 請求,使用 Java 對象和 EJB(資源庫)執(zhí)行一些邏輯,將結(jié)果數(shù)據(jù)收集起來并將其傳給 JSP;而 JSP 將渲染發(fā)回給客戶端的頁面。在 “Model 2” 中,JSP 純粹作為模板引擎使用。

1999 年 Govind Seshadri 發(fā)表了一篇文章,他將 “Model 2” 和 MVC 做了映射:

  • Controller 就是 Servlet,它控制著應(yīng)該為用戶請求做的事情;?
  • View 就是 JSP,它決定了展現(xiàn)給用戶的內(nèi)容;
  • Model,在 MVC 和 “Model 2” 中都是指整個領(lǐng)域模型。

我對這兩種模式的看法

挺奇怪的,“Model 2” 實際上是我學到的第一個版本的 “MVC”,就在不久之前。

最后,根據(jù)手頭上的項目的范圍和需求,兩種方法現(xiàn)在都可以發(fā)揮作用。

話雖如此,我認為現(xiàn)在的 Web 企業(yè)應(yīng)用需要更好的方法。
我發(fā)現(xiàn)這兩種模式共同的毛病是它們都沒有遵守單一職責原則。

當談到 “Model 1” 時,我希望每個人都清楚的看到被混在一起的關(guān)注點:我們會把模板邏輯和用例邏輯混在一起。

關(guān)于 “Model 2”,我發(fā)現(xiàn) View 和 Controller 都屬于展現(xiàn)層,可是Govind Seshadri 卻說得很清楚:“Model 2 架構(gòu)應(yīng)該導致所有的處理邏輯都集中在控制器 Servlet 之中”,盡管領(lǐng)域邏輯確實是放在外部的 Java 對象和 EJB 之中。

這意味著 “Model 2” 控制器包含了用例邏輯,它應(yīng)該屬于應(yīng)用層而不是展現(xiàn)層。

例如,如果我們要通過事件觸發(fā)一個現(xiàn)存的用例,我們需要在事件監(jiān)聽器中復制用例邏輯(已經(jīng)存在于某個控制器中),而這是一個很大的禁忌,因為這將導致維護性降低并可能導致應(yīng)用不一致(的問題)。

引用來源

1998 – Sun Microsystems – JavaServerTM PagesTM – Specification 0.92
1999 – Govind Seshadri – Understanding JavaServer Pages Model 2 architecture:
Exploring the MVC design pattern
2018 – Paul M. Jones – Model View Controller and “Model 2”
2018* – Wikipedia – JSP model 2 architecture

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一. Java基礎(chǔ)部分.................................................
    wy_sure閱讀 4,012評論 0 11
  • 這部分主要是與Java Web和Web Service相關(guān)的面試題。 96、闡述Servlet和CGI的區(qū)別? 答...
    雜貨鋪老板閱讀 1,503評論 0 10
  • IOC 控制反轉(zhuǎn)容器控制程序?qū)ο笾g的關(guān)系,而不是傳統(tǒng)實現(xiàn)中,有程序代碼之間控制,又名依賴注入。All 類的創(chuàng)建,...
    irckwk1閱讀 1,097評論 0 0
  • JAVA面試題 1、作用域public,private,protected,以及不寫時的區(qū)別答:區(qū)別如下:作用域 ...
    JA尐白閱讀 1,269評論 1 0
  • 不管在什么時候,什么地方,你欺騙時間,時間也必定會給你一記響亮的耳光。 以前,我會覺得自己很幸運,大學門門課程都...
    春宇兒閱讀 156評論 0 0

友情鏈接更多精彩內(nèi)容