上下文到底是啥?
Posted
技术标签:
【中文标题】上下文到底是啥?【英文标题】:What the heck is a context?上下文到底是什么? 【发布时间】:2011-05-26 22:59:39 【问题描述】:我开始在任何地方看到上下文。在 ASP.NET MVC 中,有 ControllerContexts、RequestContexts、HttpContexts、FormContexts。在实体框架中,您有 ObjectContexts 和 DbContexts。 Ninject 有 Ninject.Activation.IContext。
上下文到底是什么?
【问题讨论】:
要回答这个问题,您需要提供更多上下文... 可能是一个拥有状态的对象? @Noon Silk -- 我会介绍 you =) 这里有很多值得思考的好东西。每个人都同意上下文对象提供了您正在工作的环境。Noon Silk 回答了我未提出的问题,即为什么我在 MVC 世界中看到如此多的上下文。 VinayC 暗示上下文对象是可变的(这是真的,例如,在实体框架的情况下:延迟加载选项是通过 ObjectContext 设置的)。然而,我觉得我仍然缺少一些重要的想法,就像它可能是设计模式的一部分。 @Hobbes 在所有的启发之后,您可能会投票回答...... 【参考方案1】:嗯,这是一种依赖注入的东西,它允许人们说“这是你将在其中运行的环境”。一般来说,它们毫无疑问地为它提供了“上下文”。即,某个状态。也许是 URL,也许是一些 HTTP 标头,等等。
您会看到很多,因为 ASP.NET 专注于测试,因此允许“交换”这些项目,这样您就可以提供自己的上下文实现(即定义你的自己的状态),以便您可以适当且成功地运行测试。
如果您想知道 state 是什么,那么它只是环境“给定”的各种数据位。 IE。今天办公室很冷。这是状态的一部分。但也许我想在办公室很热时运行我的测试,这样我就可以继承OfficeContext
并为适当的方法/等返回适当的状态。
【讨论】:
【参考方案2】:IMO,上下文表示关于某事的一些(可能是可变的)状态。通常情况下,上下文将是横切层,并且通常跨层携带领域中性数据。
【讨论】:
“通常情况下,上下文将是横切层,并且经常跨层携带域中性数据”——我在这里有点迷失了。你能举一些例子吗? @Hobbes,如今,分层应用程序已成为常态——每一层都专注于某些方面——例如,数据访问层只关心数据持久性。所以我指的是通常情况下,所有这些层都会使用上下文,它们会跨层传递信息。但与也跨层流动的业务数据(从数据存储到 UI 再返回)不同,上下文通常是应用程序框架的一部分并携带相关数据(大部分与业务无关)。【参考方案3】:上下文是您当前正在做的事情范围之外的信息,但它可能具有重要意义。
想象一下,如果有人问你英文单词“fly”的含义。有多种定义:嗡嗡作响的小检查或在空中滑行的持续行为。为了给出正确的答案,您需要 context 告诉您他们正在寻找哪个定义 - 他们正在阅读关于双翅目或莱特兄弟的书吗?
关于计算,假设您正在实现一个 HTTP 处理程序。它可能能够在不知道任何其他内容的情况下生成响应(Hello,World!),但它更有可能需要 HTTP 请求信息的 context - 请求参数是什么,可接受的编码类型,等等,因此它可以对用户代理产生有意义的响应。
【讨论】:
我从“上下文”中推断出您的意思是昆虫与检查。【参考方案4】:我认为它们就像 telnet/ssh 会话中的环境变量和配置文件设置。它们将不同的设置捆绑在一起,以允许工具根据它们运行的上下文(即环境)执行不同的操作。
【讨论】:
【参考方案5】:IMO,这只是另一个论点。在我(有限的)经验中,我已经看到它是调用类。你必须知道什么你正在做你正在做的事情很好。上下文是你正在做的事情,正在发生/正在发生的事情。
【讨论】:
【参考方案6】:以上答案总体上相当不错。我唯一要补充的是,它最常见的用法是作为系统较低层的“粘合剂”。通常,所讨论的系统是某种“容器”系统,您的代码在更大的代码库中执行,该代码库对您隐藏了许多执行细节。上下文是该更大系统的抽象接口。
【讨论】:
以上是关于上下文到底是啥?的主要内容,如果未能解决你的问题,请参考以下文章