到底什么是上下文?

22

我开始在看到的每个地方都看到上下文(Context)。在ASP.NET MVC中,有ControllerContexts、RequestContexts、HttpContexts和FormContexts等。在Entity Framework中,你有ObjectContexts和DbContexts。Ninject有Ninject.Activation.IContext。

到底什么是上下文?


32
要回答这个问题,您需要提供更多的背景信息... - Noon Silk
可能是一个保存状态的对象? - thejh
2
@Noon Silk -- 我会联系你的 =) - Hobbes
@Hobbes 在所有的启示之后,你可以投票支持那些回答... - Dr. belisarius
@Hobbes:如果我表达不够清晰,这个设计模式叫做依赖注入:http://en.wikipedia.org/wiki/Dependency_injection (也就是说,能够外部设置对象的所有依赖项(其中之一是“上下文”))。 - Noon Silk
显示剩余2条评论
6个回答

8
嗯,这有点像依赖注入的东西,它允许人们说“这就是你将要操作的环境”。通常,它们为任何内容提供“上下文”,也就是一些状态。也许是URL,也许是HTTP头,或者其他什么东西。
你看到很多这样的东西,因为ASP.NET专注于测试,因此允许这些项被“替换”,以便您可以提供自己的上下文实现(即定义自己的状态),以便您可以适当且成功地运行测试。
如果你想知道“状态”是什么,那么它只是由环境“给定”的各种数据。例如今天办公室里很冷,这是状态的一部分。但也许我想在办公室很热的时候运行我的测试,所以我可以子类化OfficeContext并返回适当的状态,以便适当地运行方法等。

4

在我看来,上下文是关于某个事物的一些(可能可变的)状态。通常情况下,上下文会横跨多个层,并且经常在层之间传递领域中性数据。


通常情况下,上下文(context)会贯穿多个层次,并且经常在不同层之间传递与特定领域无关的数据。对此我有点困惑。您能给一些例子吗? - Hobbes
@Hobbes,现在的日子里,分层应用程序是规范 - 每个层专注于某个方面 - 例如,数据访问层只关心数据持久性。因此,我指的是通常情况下,上下文将被所有这些层使用,并跨层传递信息。但与业务数据不同,后者也会在层之间流动(从数据存储到您的UI再回来),上下文通常是应用程序框架的一部分,并携带相关数据(大多数情况下与业务无关)。 - VinayC

3

上下文是指超出当前工作范围但具有重要影响的信息。

想象一下,如果有人问你英语单词“fly”的含义。这个单词有多个定义:小昆虫或在空中滑翔的持续行为。为了给出正确的答案,你需要了解上下文,以确定他们需要哪个定义-他们是在阅读关于双翅目昆虫还是莱特兄弟的书?

在计算机方面,比如你正在实现一个HTTP处理程序。它可能能够在不知道其他任何信息的情况下生成响应(Hello, World!),但更有可能需要HTTP请求信息的上下文 - 请求参数,可接受的编码类型等,以便向用户代理生成有意义的响应。


我从“上下文”中推断出你的意思是昆虫而不是检查。 - jgreep

1

我认为它们就像telnet/ssh会话中的环境变量和配置文件设置一样。它们捆绑不同的设置,以便工具可以根据运行环境(即环境)的不同而执行不同的操作。


0

在我看来,这只是另一个参数。在我的(有限的)经验中,我看到它是调用类。你必须知道你在做什么才能做好你正在做的事情。上下文是你所做的事情,正在发生/运行的事情。


0
以上的回答大体上都很好。我唯一要补充的是,它最常见的用途是作为系统下层的“粘合剂”。通常情况下,所涉及的系统是某种“容器”系统,在这个系统中,你的代码在一个更大的代码库内执行,该代码库隐藏了许多执行细节。而上下文则是对该较大系统的抽象接口。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接