代码之家  ›  专栏  ›  技术社区  ›  Mads Mobæk

软件设计与软件架构[关闭]

  •  342
  • Mads Mobæk  · 技术社区  · 15 年前

    有人能解释一下软件设计和软件架构之间的区别吗?

    我目前的理解是:

    • 设计:系统特定模块/部分的UML图/流程图/简单线框(用于UI)

    如果我错了,请纠正我。我参考了维基百科上的文章 http://en.wikipedia.org/wiki/Software_design http://en.wikipedia.org/wiki/Software_architecture ,但我不确定我是否正确理解了它们。

    41 回复  |  直到 6 年前
        1
  •  327
  •   Robert Harvey    11 年前

    软件设计是指设计各个模块/组件。模块x的职责和功能是什么?Y班的?它能做什么,不能做什么?可以使用哪些设计模式?

        2
  •  80
  •   Patrick Karcher    15 年前

    在对 SDLC (Software Development Life Cycle) 它们是可互换的,但其共同点在于它们是不同的。它们同时是不同的(1) , (2) 责任领域 决策水平 .

    • Architecture 更重要的是:框架、语言、范围、目标和高级方法的选择( Rational , waterfall , agile
    • Design 是较小的图片:如何组织代码的计划;系统不同部分之间的合同外观如何;正在进行的 实施 项目的方法和目标。在此阶段编写规范。

    似乎 由于不同的原因混合在一起。

    1. 一个项目可能是一个更大项目的一部分,因此两个阶段的部分都已经确定。(已有数据库、约定、标准、协议、框架、可重用代码等)
    2. SDLC的新思维方式(参见 Agile methodologies )在某种程度上重新安排这种传统方法。设计(在较小程度上为架构)在SDLC中进行 故意地 iterations
    3. 软件开发是复杂的,无论如何也很难计划,但客户/经理/销售人员通常会在中途改变目标和需求,从而使开发变得更加困难。设计甚至架构决策 必须

    即使责任的各个阶段或领域融合在一起,并在各地发生,了解决策的级别总是很好的。(我们可以一直这样做。我试着把它作为一个总结。)我将以:即使你的项目似乎没有正式的架构或设计阶段/AOR/文档,不管有没有人有意识地这样做,它都在发生。若并没有人决定做架构,那个么默认的架构可能很差。设计也一样。这些概念几乎完全相同 更重要的 如果没有代表他们的正式阶段。

        3
  •  55
  •   Chris Kannon    12 年前

    架构是战略性的,而设计是战术性的。

    体系结构包括框架、工具、编程范例、基于组件的软件工程标准、高级原则。。

    而设计是一项与局部约束有关的活动,如设计模式、编程习惯和重构。

        4
  •  38
  •   Bo Persson Touseef    12 年前

    我发现这一点是因为我在寻找建筑和设计之间的简单区别;

    • 建筑是我们正在建造的东西;
    • 设计是我们如何建造的;
        5
  •  21
  •   Community CDub    4 年前
    1. 设计是指在设计之前为显示系统或对象的外观、功能或工作而制作的平面图或图纸。

    2. 如果您正在设计一个组件,那么您就是在定义它在更大的系统中的行为。

      如果您正在设计同一个组件,那么您就是在定义它在内部的行为方式。

    所有的架构都是设计,但并非所有的设计都是架构。

    What How 是具体的执行和交集 什么 怎样 这就是建筑。

    区分建筑和设计的形象 :

    Design vs Architecture

    任何在其组件边界之外不可见的设计决策都是组件内部设计,并且是非体系结构的。这些是系统架构师将留给模块设计师或实现团队的设计决策,只要他们的设计没有打破系统级体系结构施加的体系结构约束。

    good analogy

        6
  •  15
  •   andand    12 年前

    用我自己的话来说,你是对的;

    建筑学 是将系统需求分配给系统要素。关于体系结构的四种说法:

    1. 它可以引入非功能性需求,如语言或模式。
    2. 不应引入新功能,
    3. 它将系统要执行的(设计的)功能分配给元素。

    基本工程步骤 当系统的复杂性被细分时。

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

    设计 是功能(建议)实现的信息表示。其目的是征求反馈意见,并与利益相关者进行讨论。这也许是个好习惯,但是 这不是一个必要的工程步骤

    在厨房安装之前看到厨房设计会很好,但这不是烹饪要求的必要条件 :

    如果我想一想,你可以说:

    • 体系结构是面向公众/工程师的更详细的抽象级别
    • 设计是在不太详细的抽象层次上面向公众的
        7
  •  14
  •   Peter Gfader    12 年前

    • 我们可以不用问别人就改变设计
    • 如果我们改变架构,我们需要与某人(团队、客户、干系人等)沟通
        8
  •  6
  •   Enrique Molinari    13 年前

    因此,例如,如果您看到一个类图或序列图,您可以使用类语法构造将一个类及其关系映射到一种面向对象编程语言。这显然是一种设计。此外,这可能会使我们明白,本讨论与您将用于实现软件系统的编程语言有关。如果您使用Java,前面的示例适用,因为Java是一种面向对象的编程语言。如果您提出一个显示包及其依赖关系的图表,这也是设计。您可以将元素(本例中是一个包)映射到Java语法结构。

    现在,假设您的Java应用程序被划分为多个模块,每个模块都是一组包(表示为一个jar文件部署单元),您将看到一个包含模块及其依赖项的图,这就是体系结构。Java中没有一种方法(至少在Java7之前)将模块(一组包)映射到语法结构。您可能还注意到,此图代表了软件模型抽象级别的更高一步。在使用Java编程语言进行开发时,包图上方(粗粒度)的任何图都表示体系结构视图。另一方面,如果您在模块a-2中开发,那么模块图表示一种设计。

    (一段 http://www.copypasteisforword.com/notes/software-architecture-vs-software-design

        9
  •  5
  •   Tavi    14 年前

    就我个人而言,我喜欢这个:

    SCEA for Java EE学习指南 马克·凯德和汉弗莱·谢尔

        10
  •  5
  •   Ajay Shendye    12 年前

    我同意许多解释;从本质上讲,我们认识到软件系统的体系结构设计和详细设计之间的区别。

    而设计师的目标是在规范中尽可能精确和具体,因为这是开发所必需的;架构师的基本目标是指定系统的结构和全局行为,就像详细设计开始时所需的那样。

        11
  •  5
  •   Paulo Merson Basit    7 年前

    建筑是设计,但并非所有的设计都是建筑。 因此,严格地说,试图区分 . 有什么区别?这要看情况了!每个软件架构师可能有不同的答案(ymmv!)。我们开发了我们的启发式方法来给出答案,例如“类图是架构,序列图是设计”。看见 DSA book 更多。

    • 创建单个设计文档。
    • 以您想要的方式命名此设计文档,或者更好地以读者更习惯的方式命名。示例:“软件架构”、“软件设计规范”。
    • 通过添加交叉引用或超链接使文档中的视图可导航
    • here ).

    说了这么多。。。 我们需要问一个更相关的问题:多少设计就足够了? 也就是说,我应该在什么时候停止描述设计(用图表或散文),转而进行编码?

        12
  •  3
  •   MrTelly    15 年前

    是的,我听上去不错。设计是你要做的,而架构是将设计的各个部分连接在一起的方式。它可能与语言无关,但通常会指定要使用的技术,即LAMP v Windows、Web服务v RPC。

        13
  •  3
  •   Larry Watanabe    15 年前

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

    软件设计是解决问题和规划软件解决方案的过程。软件的目的和规格确定后,软件开发人员将设计或雇佣设计师为解决方案制定计划。它包括底层组件和算法实现问题以及体系结构视图。

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

        14
  •  3
  •   mr-sk    15 年前

    我认为软件也是如此。

    您可以将设计布局视为“设计布局”。。。

        15
  •  3
  •   Charles Bretana    15 年前

    好问题。。。虽然它们之间的界限很难清晰明了,但如果你同时使用这两个术语,那么架构包含了更多关于如何构建或构建某物的技术或结构决策,尤其是那些一旦实现就很难(或更难)改变的决策,然而,设计包括那些以后很容易更改的决策(如方法名称、类<->文件组织结构、设计模式、是使用单一类还是静态类来解决某些特定问题等)和/或那些影响系统或应用程序外观或美学方面的决策(人机界面、易用性、外观和感觉等)

        16
  •  3
  •   Orson    15 年前

    软件 建筑学

    体系结构并不是具体的实现细节(例如,算法和数据结构)。体系结构设计涉及比面向对象设计(OOD)通常提供的更丰富的抽象集合。

    涉及设计元素的模块化和详细接口、它们的算法和过程,以及支持体系结构和满足需求所需的数据类型。

    架构通常被用作设计的同义词(有时在前面加上形容词high-level)。许多人使用术语“架构模式”作为设计模式的同义词。

    Defining the Terms Architecture, Design, and Implementation

        17
  •  3
  •   Joshua Ramirez    15 年前

    架构:
    结构设计工作在更高的抽象层次上,实现了系统中具有重要技术意义的需求。该体系结构为进一步的设计奠定了基础。

    设计:
    通过每一层抽象的迭代过程来填充架构所没有的东西的艺术。

        18
  •  3
  •   LindsayBradford    13 年前

    我真的很喜欢这篇文章,因为它提供了将架构与设计分离的经验法则:

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

    这被称为强度/局部性假设。关于非本地和内涵的软件性质的陈述是体系结构的。地方性和内涵性的陈述是设计。

        19
  •  3
  •   buzzcoda    12 年前

    …很久以前,在一个遥远的地方,哲学家们担心一和多之间的区别。架构是关于关系的,它需要很多。体系结构具有组件。设计是关于内容的,这需要一个。设计具有属性、品质、特征。我们通常认为设计是在架构中进行的。二元思维使许多人成为原始的。但建筑也在设计中。这都是我们选择如何看待我们面前的事物——一个或多个。

        20
  •  3
  •   momo    12 年前

    很主观,但我认为:

    建筑学 系统的总体设计,包括与其他系统的交互、硬件需求、总体组件设计和数据流。

    设计

        21
  •  2
  •   Community CDub    7 年前

    例如,您的业务是关于交易员的“损益”,您的主要功能包括“投资组合评估”和“风险计算”。

    Software Architect 将详细说明他的解决方案,他将意识到:

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

    • 调度员

    软件设计将检查不同的应用程序、它们的技术关系及其内部子组件。
    它将生产最后一个阶段所需的规格 Architecture layer 商业 职能部门)开始各自的项目。

        22
  •  2
  •   Gernot Starke    12 年前

    如果他随后将引擎的构建委托给另一个团队,他们将创建一个“引擎架构”。。。

    因此,这取决于抽象或细节的层次。一个人的建筑可能是另一个人的设计!

        23
  •  2
  •   ekeren    11 年前

    建筑是 “难以改变的设计决策。”

    企业应用程序体系结构模式 ,作者:马丁·福勒

    这意味着体系结构取决于系统的语言、框架和域。如果您可以在5分钟内从Java类中提取一个接口,那么它就不再是一个简单的架构决策了。

        24
  •  1
  •   Ta01    15 年前

    Cliff Notes版本:

    设计:根据所需产品的规格实现解决方案。

    架构:支持您的设计的基础/工具/基础设施/组件。

    这是一个相当广泛的问题,会引起很多反应。

        25
  •  1
  •   Mark Redman    15 年前

    我想设计是用来把所有这些结合在一起的创意?

        26
  •  1
  •   LeWoody    15 年前

    软件设计有着较长的历史,而软件架构这个术语只有20年的历史。因此,它正在经历成长的阵痛。

    学者们倾向于将架构视为软件设计更大领域的一部分。尽管人们越来越认识到拱门是一个属于自己的领域。

    实践者倾向于将Arch视为具有战略意义的高级设计决策,在项目中撤销这些决策可能代价高昂。

    Arch和design之间的精确界限取决于软件领域。例如,在Web应用程序领域,分层体系结构目前最受欢迎(业务逻辑层、数据访问层等)。该体系结构的较低层次部分被视为设计(类图、方法签名等)。这将在嵌入式系统、操作系统和,编译器等。

        27
  •  1
  •   imran    14 年前

    体系结构是高层次、抽象和逻辑设计,而软件设计是低层次、详细和物理设计。

        29
  •  1
  •   Jacky    12 年前

    Architectural Styles and the Design of Network-based Software Architectures

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

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

        30
  •  1
  •   Eoin    11 年前

    这个问题没有明确的答案,因为“软件架构”和“软件设计”有很多定义,并且没有一个规范的定义。

    Len Bass、Paul Clements和Rick Kazman认为“所有的架构都是设计,但并非所有的设计都是架构”[实践中的软件架构],这是一种很好的思考方式。我不确定我是否完全同意这一点(因为体系结构可以包括其他活动),但它抓住了一个本质,即体系结构是一种处理设计的关键子集的设计活动。

    SEI definitions page )这是一组决策,如果决策错误,会导致项目被取消。

    几年前,Amnon Eden和Rick Kazman在一篇题为“架构、设计、实现”的研究论文中对将架构、设计和实现作为概念进行了有益的尝试,该论文可在以下位置找到: http://www.sei.cmu.edu/library/assets/ICSE03-1.pdf 建筑学 是一种可在多种环境下使用的设计,旨在应用于整个系统, 是(err)设计,可用于多种环境,但应用于系统的特定部分,以及

    我希望这有帮助!