听了腾讯犀牛鸟王佳对开源的讲解中,对其中的专业术语上游(upstream)和下游(downstream)不理解,看了这篇blog理解了特此转载记录。

看了以下blog后个人理解:自然界上水是高处往低处流,低处的水动能比高处的动能高,抽象成价值,那么价值(动能)相对高的就是下游,反之为上游。

What is Upstream and Downstream in Software Development的中文翻译版本。

在最近一段时间,我开始在软件开发环境中接触到 “上游” 和 “下游” 这两个词,常常迷惑不解。每次我都必须查一下它的含义,因此决定将它们写成blog来帮助理解。

生产过程中的上游和下游


让我们从一个简单的生产过程开始,尽管它与软件开发无关,但是我们可以在此基础上定义软件开发的上游和下游。(活动图,实心表示开始,中间一点的表示结束)

在上面的例子中,我们有三个步骤:

  1. 收集零件
  2. 组装零件
  3. 绘制装配体

上面的生产过程与河流非常相似,因此很容易理解 随着流程从一步到下一步,逐步向"下游"移动

我们可以推断以下规则:

  1. 依赖规则: 每个当前的项目都依赖于上游的所有项目
  2. 增值规则: 在向下游移动的过程中,每一步都为产品增加更多价值

现在,让我们尝试将这些规则应用于不同的软件开发环境。

软件依赖中的上游和下游


大多数软件组件都依赖于其他组件。那么什么是上游依赖和下游依赖呢?

如图所示:

组件 C 依赖于组件 B,而组件 B 又依赖于组件 A。

应用依赖规则,我们可以肯定地说组件 A 是组件 B 的上游,而组件 B 是组件 C 的上游(即使箭头指向另一个方向)。

在这里应用价值规则有点抽象,但我们可以说组件 C 拥有最大的价值,因为它“导入”了组件 B 和 A 的所有特征,并将自己的价值添加到这些特征中,使其成为下游组件。

上游和下游开源项目


另一个经常使用“上游”和“下游”这两个词的环境是开源开发。它实际上与上面讨论的组件依赖关系非常相似

考虑项目 A 和 B,其中 A 是原始项目,B 是 A 的分支:

这是开源项目中相当常见的开发风格:我们创建项目的分支,修复错误或在该分支中添加功能,然后向原始项目提交补丁。

在这种情况下,依赖规则使项目 A 成为上游项目,因为它可以在没有项目 B 的情况下很好地生存,但如果没有项目 A(原始项目),项目 B(分叉)甚至不会存在。

价值规则在这里也适用:项目 B 添加了新功能或错误修复,它为原始项目 A 增加了价值。

因此,每次我们向开源项目贡献补丁时,我们都可以说我们已经向上游发送了补丁

微服务架构中的上下游


在由微服务(或者只是老式分布式服务)组成的系统中,也有关于上游和下游服务的讨论。

依赖规则价值规则也适用于这种情况

服务 B 是上游服务,因为服务 A 依赖于它。服务 A 是下游服务,因为它增加了服务 B 的价值。

请注意,在这种情况下上游和下游的定义中的“流”不是通过服务 A 进入系统的数据流,而是数据流系统一直到面向用户的服务

服务离用户(或任何其他最终消费者)越近,它离下游越远。

结论

在使用“上游”和“下游”概念的任何上下文中,我们可以应用两个简单的规则来找出哪个项目是另一个项目的上游或下游。

如果一个项目为另一个项目增加价值或以任何其他方式依赖它,它肯定是下游。

软件开发中的上游和下游相关推荐

  1. 软件开发中的上游upstream

    什么是"上游" 上游这个词本身来自于河流,意思是理源头较近的地方,也有相对的意思,在河流的任意两点,相对理源头较近的地方就是上游,否则,称之为下游. 在非软件技术领域,如供应链等, ...

  2. 什么是软件设计中的上游和下游?

  3. 软件开发设计中的上游与下游

    生产流程中的上下游 让我们以一个简单的生产流程开始,尽管它跟软件开发没有关系,这样我们能以此为基础定义软件开发中的上下游. 上面的例子有三个步骤:收集部件.组装部件.喷漆. 一个生产流程跟一条河流很相 ...

  4. 彼之蜜糖,吾之砒霜——聊聊软件开发中的最佳实践

    作者:sherrywasp https://www.cnblogs.com/sherrywasp/p/9436623.html "描述一个事物,唯有一个名词定义它的概念,唯有一个动词揭露它的 ...

  5. 汝之蜜糖,吾之砒霜— 聊聊软件开发中的最佳实践

    文章来源:https://www.cnblogs.com/sherrywasp/p/9436623.html 作者:sherrywasp "描述一个事物,唯有一个名词定义它的概念,唯有一个动 ...

  6. 视频互动直播软件开发中的连麦问题分析

    直播行业发展至今,我们经常会听到很多朋友谈论"互动直播".那么何谓互动直播呢?其实互动直播的核心在于通过连麦技术,让视频直播有一个超过文字的更深层次的互动交流. 在视频互动直播软件 ...

  7. 统治软件开发中的著名定律

    文| https://www.timsommer.be/famous-laws-of-software-development/ 翻译| 码农翻身 和其他领域一样,在软件开发的世界中也有一些有趣而著名 ...

  8. 阿里研究员:缩短软件开发中的反馈弧

    简介:开发者写好了某个功能的代码,想知道这个功能是不是实现了,代码还需不需要再改,这就是一种反馈.在软件开发中,尤其是联调时,缩短反馈弧有助于及时发现问题.采取对策,提高开发效率.那么什么样的反馈弧才 ...

  9. 软件开发重要性_在软件开发中考虑时间的重要性

    软件开发重要性 by Crunch Tech 通过Crunch Tech 在软件开发中考虑时间的重要性 (The importance of time to think in Software Dev ...

最新文章

  1. maven安装教程安装教程_Maven教程之春
  2. oracle排序函数性能,oracle排序函数
  3. 设计模式学习笔记1——类与类之间的关系
  4. go var 一个整数_go语言中var
  5. linux下打开Mongodb命令行窗口,Linux系统下MongoDB的安装与基本操作
  6. 【ACL2021】BERT也能做生成?利用多个BERT模型分离对话生成和对话理解
  7. java之split用法注意
  8. Git 设置SSH key
  9. 学术英语视听说2听力原文_大学学术英语视听说2-高迎慧
  10. 论文阅读:A Unified Span-Based Approach for Opinion Mining with Syntactic Constituents
  11. 最适合家用的洗地机哪个牌子好?家用洗地机品牌排行榜
  12. sendgrid html text,Laravel + SendGrid htmlspecialchars()期望参数1为字符串,给定对象
  13. 聚磷酸酯-紫杉醇前药(PTX-PEEP)|聚姜黄素-二硫键-聚甲基丙烯酸二乙胺基乙酯-聚磺酸甜菜碱|齐岳生物
  14. 从《数学之美》中我想到的
  15. Acwing - 算法基础课 - 笔记(数学知识 · 一)
  16. Android 自定义视频播放器,可用于以视频做背景的需求
  17. 计算机算的快,计算神速 ——人脑的计算速度比计算机还快?
  18. 免费好用的php系统,iCMS v7.0.2一款免费、简洁、高效、好用的PHP内容管理系统
  19. STM32-外部中断
  20. Zabbix分布式监控实战(2)—— Zabbix的API接口的使用方法

热门文章

  1. 读研2年,我选择从中科院退学转行做码农
  2. ashx 修改部分 html,html+ashx 表单提交示例
  3. isNotBlank()方法和isNotEmpty()方法的区别
  4. 【高精度】 C语言实现高精度加法
  5. 软件工程概论第一次作业
  6. 现一个简单计算器,实现两个数的“加减乘除”运算。
  7. c语言排序之选择排序、插入排序
  8. js阻止默认事件和阻止事件冒泡浅谈
  9. Animator视图方法缩小
  10. MPC5634的eTPU模块学习笔记(一)