美文网首页
Context 模式与系统扩展性

Context 模式与系统扩展性

作者: 编走编想 | 来源:发表于2019-06-11 21:38 被阅读0次

开源项目中常有以 Context 命名的类,如 Spring 的 ApplicationContext、Dubbo 的 RpcContext、Netty 的 ChannelHandlerContext 等等。这些类的作用在于传递流程中所用到的各种数据,故称上下文。除了用来满足功能外,上下文类其实背后还体现了一种设计模式,这种设计模式可以帮助我们提升系统的可扩展性。

笔者曾遇到很多系统,业务流程中的某一步因业务原因需要增加功能,而这个功能所需的参数是原来所没有的。因此,实现这个功能的方法首先要增加新参数,而这个参数的生成可能是在很多步之前的一个地方。因此,这个新加了参数的方法调用链上直到参数提供者的每一个环节也都需要增加新参数。如此,一个需求很多地方都需要改动,扩展性可想而知。

Context 模式可以很好地解决这个问题。对于业务核心流程中所用到的主要和次要数据,我们都可以放在 Context 中。当再遇到上述需求时,通常只需直接使用 Context 中的数据即可。即便需要新增加数据,改动点会比不使用 Context 要少很多。

应用范围

Context 可用在系统内部数据传递,或者外部系统向系统内部传递数据。Context 适用于主流程和大部分扩展点的参数传递中。其它地方参数传递需仔细考虑,不易到处使用 Context。随意使用 Context 会导致业务含义不清。

设计实现

Context 不宜直接采用 Map 的形式,而是对其中的主要业务数据有清晰定义。 如 Spring 的 ApplicationContext 的主要业务数据是 Bean,故有 getBean 方法。Netty 的 ChannelHandlerContext 中包含的主要数据有 Channel、ChannelHander、Executor 等,因此也各有相应的方法。通常来说,这些有名有姓的数据是必须的,至少是有默认值的。

Context 在形式上通常是一个接口,其中的主要数据只会有只读方法暴露,避免其它代码任意修改其内容,从而影响功能正常。而对于次要数据,通常会提供一个 Map 形式的存储字段,可读可写。

Context 的具体实现是有系统内部提供。主要数据写入也是有系统内部实现,对于外部系统来说这是一个黑盒过程。

最后

关于 Context 模式就先聊到这里,有任何想法欢迎交流。

相关文章

  • Context 模式与系统扩展性

    开源项目中常有以 Context 命名的类,如 Spring 的 ApplicationContext、Dubbo...

  • 让你再也忘不了IO相关知识-Java IO图文详解

    1 装饰模式 Java中IO使用的是装饰模式,装饰模式在Android中很常见,比如系统的Context。 装饰模...

  • 集群分布式概念

    扩展性与可伸缩性 可伸缩性指系统通过增加或减少硬件从而提升或降低系统性能。CPU,存储,节点。可扩展性软件系统应对...

  • Context

    1、 概念 Context中文含义为环境,上下文。从Android系统的角度来讲:Context就是用户与And...

  • Android Context 干货

    一、源码角度解析Context 从系统的角度来理解:Context是一个场景,代表与操作系统的交互的一种过程。Co...

  • 详解 Scala 中的 Context Bounds

    What is Context Bounds? 这是Scala 2.8 引入的新特性,通常与类型类模式(type ...

  • javascript设计模式七:模板方法模式

    模板方法模式,是一种典型的通过封装变化提高系统扩展性的设计模式。在传统的面向对象语言中,一个运用了模板方法模式的程...

  • 【CoreGraphics】CGPattern - 模式填充

    模式填充,类似瓷砖效果; 创建 设置回调 设置模式 操作 实际使用 结合 Context 绘制,区分有色填充与无色...

  • Android系统资源调用

    //获取系统提示音private static void startAlarm(Context context) ...

  • 图解设计模式

    前言 在大规模系统的开发中,设计模式可以帮助我们实现系统的结构化,很好地支撑起系统的稳定性和可扩展性。 学习设计模...

网友评论

      本文标题:Context 模式与系统扩展性

      本文链接:https://www.haomeiwen.com/subject/esncfctx.html