软件开发设计中的上游与下游
生产流程中的上下游
让我们以一个简单的生产流程开始,尽管它跟软件开发没有关系,这样我们能以此为基础定义软件开发中的上下游。
上面的例子有三个步骤:收集部件、组装部件、喷漆。
一个生产流程跟一条河流很相似,所以我们很容易理解:随着流程一步步往下进行,我们在往下游移动。
我们可以推出以下原则:
依赖原则:从自身的角度看,每个环节都依赖其上游的环节
价值原则:往下游移动,每一环节都在产品上增加了价值
现在让我们将这些原则运用到不同的软件开发场景中。
软件依赖的上下游
很多软件模块会依赖其他的模块。那么什么是上游依赖和下游依赖呢?
考虑下面关系: 模块 C 依赖模块 B,模块 B 依赖模块 A。
运用依赖原则,我们可以有把握地说模块 A 是模块 B 的上游,模块 B 和模块 C 的上游(尽管箭头是相反的方向)
这里运用价值原则会有点抽象,但是我们可以认为模块 C 拥有最多的价值,因为它导入了模块 B 和 A 的所有功能,并且附加了自己独有的价值。所以模块 C 是下游模块。
开源项目中的上下游
另一个“上游”和“下游”被广泛使用的场景是开源软件开发。它跟上面讨论的模块依赖很像。
有两个项目 A 和 B,A 是原始项目,B 是从 A fork 出来的:
这在开源项目中是很常见的开发模式:我们 fork 一个项目,在新项目中修复 bug 或者添加功能之后,提交一个 patch 到原来的项目。
在这个场景下,运用依赖原则:项目 A 是上游项目,因为没有项目 B 它也可以很好地存在,但是项目 B 无法存在如果没有项目 A。
运用价值原则同样可以运用:因为项目 B 增加了一些功能或者 bugfix,跟项目 A 比它增加了价值。
所以每次我们往开源项目贡献一个 patch,我们可以说我们往上游发了一个 patch。
(微)服务中的上下游
在由微服务(或者只是过时的分布式服务)构成的系统中,同样有上下游服务的讨论。意料之中,依赖原则和价值原则都可以运用到这个场景。服务 B 是上游服务因为服务 A 依赖它。服务 A 是下游服务因为它在服务 B 的基础上增加了价值。
请注意这里讨论的什么是上游什么是下游中的“游”不是通过服务 A 进入系统的数据流,而是从系统核心部分到面向用户服务的数据流。
离用户(或者其他终端客户)越近的服务,它就越下游。
结论
我们可以在任何有“上游”和“下游”的场景中,运用这两条简单的原则来判断哪个是上游哪个是下游。
如果一个事物在另一个事物上增加了价值,或者以任何方式依赖另一个事物,那么它一定是下游。
参考链接:
https://reflectoring.io/upstream-downstream/
软件开发设计中的上游与下游相关推荐
- 什么是软件设计中的上游和下游?
- 软件开发中的上游和下游
听了腾讯犀牛鸟王佳对开源的讲解中,对其中的专业术语上游(upstream)和下游(downstream)不理解,看了这篇blog理解了特此转载记录. 看了以下blog后个人理解:自然界上水是高处往低处 ...
- 在Android软件开发教学过程中应当注意的事项总结
近些年来,为了提升学生就业率和收入水平,某些高校或培训机构将Android软件开发当做一门专业学科.Android学科的主要目标是培养学生快速掌握Android开发基本知识和技能,以便于学生利用掌握的 ...
- 浅析软件开发项目中的需求分析
[摘要]在软件开发项目中,需求分析是关乎软件项目开发成败的重要因素.现在的软件项目中返工开销占了总开销很大比例,而导致返工的主要原因是需求分析不明确.针对这一情况,文章阐述了软件开发中需求分析任务.需 ...
- 软件开发团队中的特殊角色
软件开发团队中的特殊角色 转载请注明出处http://blog.csdn.net/uxyheaven/article/details/50544809 软件开发团队中有各式各样角色, 如产品, 设计, ...
- 项目管理进阶--软件开发项目中的团队组成
#项目管理进阶–软件开发项目中的团队组成 ##项目经理 项目经理负责分配资源,确定优先级,协调与客户和用户之间的交往.总而言之,就是尽量使项目团队一直集中于正确的目标.项目经理还要建立一套工作方法,以 ...
- MBTI在软件开发团队中的应用
人绝不是一种资源.一方面我们不可能因人设岗,另一方面也不能忽略人性的差异.面对问题时,不要总是单纯地从人的态度或品德上查找问题,而是要反思人事安排和流程建设上的不足.奢望一个人改掉他的缺点,还不足充分 ...
- 计算机辅助设计技术的应用研究,计算机辅助设计软件在室内设计中的应用研究...
摘要:本文以计算机辅助设计软件的基本认识为切入点,分析计算机辅助软件所具有的作用,重点研究和讨论计算机辅助设计软件在室内设计中的应用. 关键词:计算机辅助设计软件:室内设计:应用研究 随着科学技术的不 ...
- 写好一份软件开发设计文档
如何写好一份软件开发设计文档 转载: 设计文档 - 也被称作技术规范和实现手册,描述了你如何去解决一个问题,是确保正确完成工作最有用的工具,其目的是迫使你对设计展开缜密的思考,并收集他人的反馈,进而完 ...
最新文章
- 杭电2682--Tree(Prim)
- Markdown的基本语法
- 如何生成动态库 .dll 的符号 .lib 文件?
- html表格选择一行,vue + element table表格如何默认选中第一行
- LeetCode Algorithm 507. 完美数
- Reindex SQL Server DB table
- pom.xml 如果使用 mvn exec:exec 命令运行项目
- kubeadm源码分析(kubernetes离线安装包,三步安装)
- 浅析总结 Java 内部类的一些使用与梳理
- c++取模运算/求余运算
- 单位元转换万元怎么转_excel教程:将单位为元的excel数值转换成单位为万元的数值...
- 手Q真的输给微信了吗?
- 任务并行库(Task Parellel Library)parallel.for parallel.foreach、List、ConcurrentBag 并行集合、线程安全结合
- wechat-0052,微信公众号,第三方登录—扫码登录
- 这样软件开发人才级别的划分你同意吗
- python—生产者消费者模型
- 如何将GPU中list类型的数据转移到CPU
- 微软杀毒软件OneCare号称全能 现存五大悬疑(转)
- 启动nginx报错问题(nginx: [emerg] bind() to 0.0.0.0:80 failed (10013: An attempt was made to access a socke
- 用云服务器windows环境下来搭建一个Minecraft服务器教程以及客户端使用教程java版