“Model|“Model 1” 和 “Model 2”(译)
原文:https://herbertograca.com/2018/08/29/model-1-model-2/
这篇文章是软件架构编年史(译)的一部分,这部编年史由一系列关于软件架构的文章组成。在这一系列文章中,我将写下我对软件架构的学习和思考,以及我是如何运用这些知识的。如果你阅读了这个系列中之前的文章,本篇文章的的内容将更有意义。
JSP 是这样一种技术,它是可以与 PHP、ASP 或是 Python 比肩的脚本语言,用来创建服务端的页面,这些页面由 JVM 解释,可以使用 Java 对象。
【“Model|“Model 1” 和 “Model 2”(译)】最早的 JSP 规范,于 1998 年由 Sun Microsystems 发布,定义了两种组织应用结构的方式,因此,展现逻辑能够以 HTTP 请求/响应范式和业务逻辑甚至用例解耦。
有人认为 “Model 1” 和 “Model 2” 是最早将原本为桌面软件开发上下文而生的 MVC 模式应用到网络 HTTP 请求/响应范式的尝试。
Model 1
第一份 JSP spec. v0.92 提案,只是将 JSP 仅用作展现层的制品,它将包含全部展现层和用例逻辑。
文章图片 |
---|
“Model 1” (JSP spec. v0.92) |
Model 2 第二份关于如何使用 JSP 的提案是为了那时所谓的复杂 Web 应用。但是,请记住,现在的 Web 应用的规模和复杂性要高得多。
|
文章图片
“Model 2” (JSP spec. v0.92) |
1999 年 Govind Seshadri 发表了一篇文章,他将 “Model 2” 和 MVC 做了映射:
- Controller 就是 Servlet,它控制着应该为用户请求做的事情;?
- View 就是 JSP,它决定了展现给用户的内容;
- Model,在 MVC 和 “Model 2” 中都是指整个领域模型。
最后,根据手头上的项目的范围和需求,两种方法现在都可以发挥作用。
话虽如此,我认为现在的 Web 企业应用需要更好的方法。
我发现这两种模式共同的毛病是它们都没有遵守单一职责原则。
当谈到 “Model 1” 时,我希望每个人都清楚的看到被混在一起的关注点:我们会把模板逻辑和用例逻辑混在一起。
关于 “Model 2”,我发现 View 和 Controller 都属于展现层,可是Govind Seshadri 却说得很清楚:“Model 2 架构应该导致所有的处理逻辑都集中在控制器 Servlet 之中”,尽管领域逻辑确实是放在外部的 Java 对象和 EJB 之中。
这意味着 “Model 2” 控制器包含了用例逻辑,它应该属于应用层而不是展现层。
例如,如果我们要通过事件触发一个现存的用例,我们需要在事件监听器中复制用例逻辑(已经存在于某个控制器中),而这是一个很大的禁忌,因为这将导致维护性降低并可能导致应用不一致(的问题)。
引用来源 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
推荐阅读
- 野营记-第五章|野营记-第五章 讨伐梦魇兽
- 艾略特的交易法则“遵循自然规律”
- 闲杂“细雨”
- “成长”读书社群招募
- 上班后阅读开始变成一件奢侈的事
- “精神病患者”的角度问题
- 说的真好
- 2021-02-10(找不回的“年味”……)
- “不完美,才美”01(190410)
- 火锅