软件devise与软件架构

有人可以解释软件devise和软件架构之间的区别吗?

进一步来说; 如果你告诉某人向你展示“devise” – 你期望他们提出什么? “build筑”也一样。

我目前的理解是:

  • devise:用于特定模块/系统的一部分的UML图/stream程图/简单线框(用于UI)
  • 架构:组件图(显示系统的不同模块如何与其他系统进行通信),使用哪种语言,模式…?

如我错了请纠正我。 我已经提到维基百科上有关于http://en.wikipedia.org/wiki/Software_design和http://en.wikipedia.org/wiki/Software_architecture的文章,但我不确定是否正确理解了它们。

你是对的。 系统的架构是它的“骨架”。 这是系统抽象的最高级别。 存在什么types的数据存储,模块如何相互作用以及存在哪些恢复系统。 就像devise模式一样,还有架构模式:MVC,三层分层devise等等。

软件devise是关于devise各个模块/组件的。 模块x的职责是什么? Y类? 它能做什么,什么不可以? 什么devise模式可以使用?

所以简而言之,软件架构更多的是关于整个系统的devise,而软件devise则侧重于模块/组件/类的层面。

在SDLC(软件开发生命周期)的一些描述中,它们是可互换的,但是它们是不同的。 它们同时是:不同的(1) 阶段 ,(2) 责任区域 ,(3) 决策层次

  • 架构是一个更大的框架:框架,语言,范围,目标和高级方法论( Rational , 瀑布 , 敏捷等)的select。
  • devise是一个较小的图像:如何组织代码的计划; 系统不同部分之间的合同将如何展现; 目前正在执行项目的方法和目标。 规范是在这个阶段写的。

由于不同的原因,这两个阶段似乎会融合在一起。

  1. 较小的项目往往没有足够的空间将计划分解到各个阶段。
  2. 一个项目可能是一个更大的项目的一部分,因此两个阶段的一部分已经决定。 (现有的数据库,约定,标准,协议,框架,可重复使用的代码等)
  3. 思考SDLC的更新思路(请参阅敏捷方法 )稍微重新安排了这种传统方法。 devise(架构在较小程度上)是在整个SDLC中进行的 。 经常有更多的迭代整个过程发生一遍又一遍。
  4. 软件开发是复杂的,难以计划,但客户/经理/销售人员通常在中途改变目标和要求使其变得更加困难。 devise甚至架构决策都必须在项目的后期进行,无论是否为计划。

即使责任的各个阶段或领域融合在一起,并发生在各地,总是知道什么级别的决策正在发生。 (我们可以永远持续下去,我试图把它保留一个总结)我会以下面的结尾:即使看起来你的项目没有正式的架构或devise阶段/ AOR / documentaiton,是否有人自觉地做或不做。 如果没有人决定做架构,那么默认的架构可能很差。 同样devise。 如果没有正式的阶段代表它们,这些概念就更为重要

build筑是战略性的,而devise是战术性的。

架构包括框架,工具,编程范例,基于组件的软件工程标准,高层原则。

虽然devise是与本地约束有关的活动,例如devise模式,编程习惯用法和重构。

我发现这一点,因为我正在寻找自己的架构和devise之间的简单区分。
你怎么看待他们的这种方式:

  • build筑是我们正在build造的东西;
  • devise是我们正在build造的“如何”
  1. 体系结构是指计算机或计算机系统的概念结构和逻辑组织。

    “devise”系指制作的计划或图纸,以表明系统或物体在制造之前的外观和function。

  2. 如果你正在“构build”一个组件,你正在定义它在更大的系统中的performance。

    如果你正在“devise”同一个组件,你正在定义它在内部的performance。

所有的架构都是devise,但不是所有的devise都是架构

devise是What部分,具体实现是What以及build筑学的WhatHow交叉。

用于区分build筑和devise的图像

设计vs建筑

也有devise决策,这不是在架构上重要的,即不属于devise的架构分支。 例如,一些组件的内部devise决策,如algorithm的select,数据结构的select等。

任何在组件边界外不可见的devise决策都是组件的内部devise,并且是非架构的。 这些是系统架构师在模块devise者的判断或实现团队中留下的devise决策,只要他们的devise不会破坏系统级架构施加的架构限制。

这个链接提供了很好的比喻

用我自己的话说,我说你是对的。

体系结构是系统要求对系统要素的分配。 关于架构的四个陈述:

  1. 它可以引入非function性要求,如语言或模式。
  2. 它定义了组件,接口,时序等之间的交互
  3. 它不应该引入新的function,
  4. 它分配系统打算执行的(devise的)function到元素。

当系统的复杂性被细分时,架构是一个重要的工程步骤

例如:想想你的房子,你不需要厨房的build筑师(只涉及一个元素),但是完整的build筑物需要一些交互的定义,比如门和屋顶

devise是函数的(build议的)实现的信息表示。 目的是引出反馈并与利益相关者进行讨论。 这可能是一个很好的做法,但不是一个重要的工程步骤

在厨房安装之前看到厨房devise会很高兴,但对于烹饪要求并不重要

如果我考虑一下,你可以说:

  • 架构是为公众/工程师提供更详细的抽象层次
  • devise是针对不太详细的抽象层面上的公众

我的提醒:

  • 我们可以改变devise而不要求某人
  • 如果我们改变体系结构,我们需要把它传达给某个人(团队,客户,利益相关者,…)

我认为我们应该使用以下规则来确定什么时候我们谈论devisevs架构:如果您创build的软件图片的元素可以一对一地映射到编程语言的语法结构,那么devise,如果不是架构。

因此,例如,如果您看到类图或序列图,则可以使用Class语法结构将类及其关系映射到面向对象的编程语言。 这显然是devise。 另外,这可能会引起这个讨论与您将用来实现软件系统的编程语言的关系。 如果使用Java,则前面的示例适用,因为Java是面向对象的编程语言。 如果您想出了一个显示包及其依赖关系的图,那也就是Design。 您可以将元素(本例中为包)映射到Java语法结构。

现在,假设你的Java应用程序被划分为模块,每个模块都是一组包(表示为一个jar文件部署单元),然后给出一个包含模块及其依赖关系的图,即Architecture。 Java中没有办法(至less在Java 7之前)将一个模块(一组包)映射到一个语法结构。 您可能还会注意到,该图代表了您的软件模型抽象级别的更高一步。 上面的任何图(粗粒度)都是一个包图,代表了用Java编程语言开发时的体系结构视图。 另一方面,如果你正在开发Modula-2,那么一个模块图代表一个Design。

(来自http://www.copypasteisforword.com/notes/software-architecture-vs-software-design的片段);

我同意很多的解释。 基本上我们正在认识到build筑devise和软件系统的详细devise之间的区别。

虽然devise师的目标是在规格上要精确和具体,因为这对开发是必要的。 架构师本质上是为了详细说明系统的结构和全局行为。

一个好的架构师可以防止超规范 – 架构不能过分规定,但只是足够的(build筑)决策只为了处理最昂贵的风险的方面,并有效地提供一个框架(“共同性”),详细的devise可以用于本地function的可变性。

实际上,架构过程或生命周期只是遵循这个主题 – 足够的抽象层次来概述(架构)重要的业务需求的结构,并在更具体的可交付成果的devise阶段留下更多的细节。

我个人喜欢这个:

“devise师关心用户按下button会发生什么情况,架构师关心的是万用户按下button时发生了什么。

由Mark Cade和Humphrey Sheil 撰写的Java™EE学习指南SCEA

是的,这听起来对我来说。 devise就是你将要做的事情,而build筑是devise的零散部分连接在一起的方式。 它可能是语言不可知的,但通常会指定要使用的技术,例如LAMP v Windows,Web Service v RPC。

程序或计算系统的软件体系结构是系统的结构或结构,包括软件组件,这些组件的外部可见属性以及它们之间的关系。

(来自维基百科, http://en.wikipedia.org/wiki/Software_architecture

软件devise是解决问题和规划软件解决scheme的过程。 在确定了软件的目的和规格后,软件开发人员将devise或聘请devise人员制定解决scheme。 它包括低级组件和algorithm实现问题以及架构视图。

(来自维基百科, http://en.wikipedia.org/wiki/Software_design

不能说更好自己:)

我把build筑视为帕特里克·凯奇(Patrick Karcher)所做的 – 大局。 例如,您可以将build筑物提供给build筑物,查看其结构支撑,窗户,入口和出口,排水等等。但是,您没有“devise”楼层布局,隔间位置等。

所以当你devisebuild筑时,你还没有devise每个办公室的布局。 我认为软件也是如此。

您可以查看devise布局,作为“架构布局”,虽然…

好的问题…虽然他们之间的界限不是一个明显的尖锐线,但如果你使用两个术语,那么架构就会包含更多关于如何构build或构build某些内容的技术或结构性决策,特别是那些将是困难的决策或更难)改变一次实现,而devise则包含那些稍后易于改变的决定(如方法名称,类文件组织结构,devise模式,是使用单例还是静态类来解决某些特定问题等)和/或那些影响系统或应用的外观或美学方面(人机界面,易用性,外观和感觉等)

除了计算的algorithm和数据结构之外,软件架构是“关心的问题。

体系结构特别不是关于实现的细节(例如,algorithm和数据结构)。与OOD(面向对象devise)通常提供的相比,体系结构devise涉及更丰富的抽象集合。

devise关注devise元素的模块化和详细界面,algorithm和程序以及支持该体系结构和满足要求所需的数据types。

“build筑”通常被用作“devise”的同义词(有时在形容词“高级”之前)。 许多人使用术语“架构模式”作为“devise模式”的同义词。

看看这个链接。

定义术语体系结构,devise和实现

build筑:
在抽象层次较高的结构devise工作,实现系统技术上的重要要求。 该架构为进一步devise奠定了基础。

devise:
通过在每个抽象层迭代过程来填充架构的艺术。

我真的很喜欢这篇文章,将build筑与devise分离的经验法则:

http://www.eden-study.org/articles/2006/abstraction-classes-sw-design_ieesw.pdf

它被称为内涵/地点假设。 关于非本地和内涵软件的性质的声明是build筑。 本地和内涵的陈述是devise。

很久以前,在一个遥远的地方,哲学家们担心这个与众多之间的区别。 build筑是关于关系,这需要很多。 架构有组件。 devise是关于内容,这需要一个。 devise具有属性,质量,特性。 我们通常认为devise在架构之内。 二元思维给了许多原始的。 但架构也在devise之中。 这就是我们如何select看待我们面前的东西 – 一个还是多个。

很主观,但我的意见:

架构系统的总体devise包括与其他系统的交互,硬件需求,整体组件devise和数据stream。

devise整个系统中的组件和stream程。 这也将包括组件的API与其他组件的交互。

build筑是devise,但不是所有的devise都是build筑。 因此,严格来说,试图区分build筑devise非build筑devise更为合理 。 有什么区别? 这取决于! 每个软件架构师可能会有不同的答案(ymmv!)。 我们开发我们的启发式来提出一个答案,例如“类图是架构和顺序图是devise”。 更多信息请参阅DSA书籍 。

通常认为,架构比devise更具抽象层次,或架构是逻辑的,devise是物理的。 但是这个概念虽然被普遍接受,但实际上却毫无用处。 在逻辑和物理之间,你在哪里抽取高或低抽象之间的界线? 这取决于!

所以,我的build议是:

  • 创build一个devise文档。
  • 以你想要的方式来命名这个devise文件,或者更好地说,这是读者比较习惯的方式。 例如:“软件架构”,“软件devise规范”。
  • 把这个文档分解成多个视图,记住你可以创build一个视图作为另一个视图的细化。
  • 通过添加交叉引用或超链接使文档中的视图可导航
  • 那么您将会看到更高层次的视图,展示devise的广泛但浅薄的概述,以及更接近实施的视图,展示更窄更深的devise细节。
  • 你可能想看看一个多视图体系结构文档的例子( 这里 )。

说了这么多… 我们需要问的更相关的问题是:多lessdevise就足够了? 也就是说,我应该什么时候停止描述devise(在图表或散文中),并且应该转向编码?

软件体系结构最适合在系统级使用,当需要将业务和function按照更高架构级别标识到应用程序中时。

例如,您的业务是交易者的“盈亏”,您的主要职能涉及“投资组合评估”和“风险计算”。

但是当一位软件架构师会详细解释他的解决scheme时,他会意识到:

“投资组合评估”不能只是一个应用程序。 需要在可pipe理的项目中进行细化,例如:

  • GUI
  • 发射台
  • 调度员

(因为涉及的操作非常庞大,需要在多台计算机之间进行拆分,同时仍然通过一个通用的GUI进行监视)

软件devise将检查不同的应用程序,技术关系和内部子组件。
它将生成上一个架构层 (“技术架构”)所需的规范(在技术框架或横向组件方面)以及项目团队(更多以业务function的实现为导向)开始他们各自的项目。

如果有人build造一艘船,那么发动机,船体,电路等将成为他的“build筑元素”。 对他来说,引擎build设将是“devise工作”。

如果他把发动机的build设委托给另一个团队,他们将创build一个“引擎架构”…

所以 – 这取决于抽象层次或细节。 一个人的build筑可能是另一个人的devise!

架构是“难以改变的devise决定”。

在与TDD合作之后,这实际上意味着您的devise始终在变化,我经常发现自己正在为这个问题苦苦挣扎。 上面的定义是从Martin Fowler 的“企业应用程序体系结构模式”中提取的

这意味着架构依赖于您的系统的语言,框架和领域。 如果你只能在5分钟内从Java类中提取一个接口,那么不再是架构决定了。

架构是构build系统的devise模式的集合。

我想devise是用来把所有这些放在一起的创造力?

软件devise有更长的历史,而软件体系结构只有20年的历史。 因此,现在正在经历成长的痛苦。

学者们倾向于把build筑作为软件devise领域的一部分。 虽然人们越来越认识到Arch是一个属于自己的领域。

从业者倾向于将Arch视为具有战略意义的高层devise决策,并且在项目中可能需要付出代价。

Arch与devise之间的确切界限取决于软件领域。 例如,在Web应用领域,分层体系结构正在得到最受欢迎(Biz逻辑层,数据访问层等)。Arch的低层部分被认为是devise(类图,方法签名等)。 )这在embedded式系统,操作系统,编译器等领域将有不同的定义。

架构是高层次,抽象和逻辑devise,而软件devise是低层次,细节和物理devise。

另请参阅: http : //en.wikipedia.org/wiki/4%2B1_Architectural_View_Model

我喜欢Roy Thomas Fielding在他的论文中对软件体系结构的定义和解释: build筑风格和基于networking的软件体系结构的devise

软件体系结构是软件系统运行某个阶段的运行时元素的抽象。 一个系统可能由多个抽象级别和多个操作阶段组成,每个阶段都有自己的软件体系结构。

他强调“运行时间元素”和“抽象层次”。

对此没有明确的答案,因为“软件架构”和“软件devise”有很多定义,也没有一个规范的定义。

Len Bass,Paul Clements和Rick Kazman所说的“所有架构都是devise,而不是所有的devise都是架构”(“实践中的软件架构”)都是一个很好的思路。 我不确定我是否完全同意这个观点(因为架构可以包含其他的活动),但它体现了架构是处理关键devise子集的devise活动的本质。

我稍微轻浮的定义(在SEI定义页面上find)是,如果做错了,那么这个决定会导致你的项目被取消。

几年前,Amnon Eden和Rick Kazman在一篇题为“Architecture,Design,Implementation”的研究论文中做了一个将概念,devise和实现作为概念进行分离的有用尝试,可以在这里find: http://www.sei.cmu .edu / library / assets / ICSE03-1.pdf 。 他们的语言是相当抽象的,但是他们说, 架构是可以在许多环境中使用的devise,并且意味着在整个系统中应用, devise是(错误)devise,可以在许多环境中使用,但是应用在特定的部分系统的实现是针对上下文特定的devise,并在该上下文中应用。

因此,架构决策可能是通过消息而不是RPC来集成系统的决定(所以这是一个可以在很多地方应用的一般原则,并且打算应用于整个系统),devise决定可能是使用主/ slave线程结构在系统的input请求处理模块中(一个可以在任何地方使用的一般原则,只是在一个模块中使用的一般原则),最后,一个实现的决定可能是从请求路由器到请求pipe理器模块中的请求处理程序(一个仅与该上下文相关的决策,在该上下文中使用)。

我希望这有帮助!

devise:了解模块,模块之间的关系,每个模块的function,类及其成员函数,每个模块的接口之间的相互通信。

架构:架构是一个软件系统的整个结构。 所有的模块,类和组件执行不同的任务,并会给出一个独特的结果。

例如:有一个有5个房间的房子。 还有附加浴室。 厨房也在家里。 所以家里有不同的东西,这些东西都有不同的关系。 所以这就是一个家的“devise”。

而当你从屋外看时,你所看到的整个结构都是关于build筑。