当前位置: 首页 > 面试题库 >

您能解释一下上下文设计模式吗?

邓焱
2023-03-14
问题内容

我已经开始阅读有关Context设计模式的文章。这是我从文本中了解的内容:

您有一个包含所有变量的映射

您可以将其传递给任何需要它的人,这样就不必将所有变量都作为方法参数发送

我“得到”了吗?


问题答案:

我“得到”了吗?

对不起,还不完全是。

Context Object的目标不是将大量参数隐式传递给方法,这是绕过强类型和封装的一种方法。目标是以通用但受管理的方式存储范围内的数据,而与协议和表示技术无关。本质上,存储在范围内的数据是共享的,仍然可以进行结构化,并且与传递给方法的一次性参数本质上不同。

上下文对象模式最初是在Core J2EE Patterns 2nd Ed中引入的。“上下文”部分是指对象在范围 的上下文
(例如application/session/request/conversation/flash)的上下文中保存数据的事实。

其目的是尽可能将应用程序数据和逻辑与特定于协议/表示技术的类(例如HttpSession和)分离HttpRequest。

模式实施

下上下文对象,用于应用/会话/请求数据/其他范围并不直接放入ServletContext/ HttpSession/ HttpRequest/其它特定于协议的类。取而代之的是,数据存储在一个POJO包装类,即随后在坐在ServletRequest/ HttpSession/ HttpRequest/其它。

上下文对象可以将数据存储在映射中,但是不需要-它可以以与程序相关的任何结构/格式存储数据。

应用程序可以在每个作用域中使用一个上下文对象类,也可以使用多个类以有序的方式拆分数据,从而避免过多的类膨胀并促进关注点分离。

上下文对象由最前面的表示形式类(视图,前端控制器,调度程序)使用。这些演示客户端对象调用contextObject.get来检索存储的作用域数据,并调用contextObject.put来存储作用域的上下文数据。

它不会传递到业务/集成逻辑中。它不用作通过强类型传递将多个参数传递给业务对象的方法。业务和集成层以使用特定的强类型参数的业务代表,应用程序服务和/或会话外观为代表。

模式的好处

可测试性:单元测试只需要模拟一个简单的POJO,而不是特定于协议的复杂服务器类,例如ServletContextHttpRequest
灵活性和可重用性:应用程序的核心独立于类的瘦协议特定的“表示”层而工作。这意味着应用程序可以更轻松地更改或添加协议或表示技术(例如HTML / HTTP / Servlet和WAP / Servlet以及XML / SOAP / HTTP / EJBHTML / HTTP / JSF)
注释

是一种历史模式有人可能会说依赖注入框架,例如CDI,Guice,Spring,Seam等,提供了已经以协议无关方式实现的范围存储。也就是说,所有范围都已经实现为上下文对象,这意味着开发人员不必强迫创建其他上下文对象。但这并不会否定模式-这意味着CDI框架已经支持该模式。

如果实施不正确,可能会出现“在整个应用程序中传递巨大的上下文对象”反模式
引用KaptajnKold:我想你明白了。但是,我也认为这更多是要避免的反模式。在这里看看为什么。



 类似资料:
  • 问题内容: 什么是上下文对象设计模式? 问题答案: 上下文是数据的集合,通常存储在或自定义类中,该类充当具有访问器和修饰符的结构。它用于维护状态并在系统内共享信息。有关详细说明,请参见此PDF。尽管它可以用于高效和有效的数据共享,但是您应该注意,许多人都将这种模式作为反模式来提防。

  • 解释器(Interpreter) Intent 为语言创建解释器,通常由语言的语法和语法分析来定义。 Class Diagram TerminalExpression:终结符表达式,每个终结符都需要一个 TerminalExpression。 Context:上下文,包含解释器之外的一些全局信息。 Implementation 以下是一个规则检验器实现,具有 and 和 or 规则,通过规则可以构

  • 我对javascript还是个新手,只知道基本知识。有人能解释一下下面的代码,就像在调用init函数时发生的流中一样吗? 我对下面代码的理解是,一旦调用init函数,就会设置一个全局变量输出,该输出映射到一个带有id输出的HTML元素。然后调用。这将创建一个WebSocket对象。这之后是我不完全理解的部分。 在行中,WebSocket对象有一个名为open的属性,我们将它设置为任何返回的属性 。

  • 本文向大家介绍javascript设计模式之解释器模式详解,包括了javascript设计模式之解释器模式详解的使用技巧和注意事项,需要的朋友参考一下 神马是“解释器模式”? 先翻开《GOF》看看Definition: 给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。 在开篇之前还是要科普几个概念: 抽象语法树: 解释器模式并未解释如何创建一个抽象语

  • 问题内容: 我的问题是关于接口的设计选择。如果要从中创建上下文,可以执行以下操作: 如果是接口的一部分,那就更好了,这样我们可以简单地写: 对我来说似乎干净得多。它更短,并且不需要。 为什么产生子上下文的函数不是接口的一部分? 问题答案: 这是类型: 这很简单。如果要编写它的实现,可以这样做吗?是的,很容易。由于没有“设置”方法,因此每个方法都只能返回默认值/ 零值,并且是“有效”的实现。这正是背

  • 本文向大家介绍说一下你熟悉的设计模式?相关面试题,主要包含被问及说一下你熟悉的设计模式?时的应答技巧和注意事项,需要的朋友参考一下 单例模式:保证被创建一次,节省系统开销。 工厂模式(简单工厂、抽象工厂):解耦代码。 观察者模式:定义了对象之间的一对多的依赖,这样一来,当一个对象改变时,它的所有的依赖者都会收到通知并自动更新。 外观模式:提供一个统一的接口,用来访问子系统中的一群接口,外观定义了一