软件架构如何设计(外国大神手把手教你如何设计软件架构)
软件架构如何设计(外国大神手把手教你如何设计软件架构)如果您可以构建一个易于使用并快速交付结果的系统会怎样?如果您能以最少的时间浪费在开发上,将您的产品推出市场会怎样?您会有对购买感到满意的客户,对吗?一个实用的组件模型可以分为两种类型:您需要知道许多因素会影响应用程序开发项目的成功或失败。尽管如此,有一件事最突出:精心设计的架构将使您的软件在未来更加可靠和易于构建。可视化编程模型表示组件之间的交互、它们如何相互关联以及这些关系如何随时间变化。一个很好的例子是一个面向对象的程序,其中类表示数据,函数(或方法)用于操作它。实用的组件模型是一组易于使用、理解和维护的组件。它为创建健壮的架构提供了必要的构建块。
作者:埃尔钦·德德奥卢
介绍软件系统的架构对其成功至关重要。它决定了不同部分如何组合在一起,并影响系统开发和维护的速度。良好的架构设计还可以帮助您避免在开发过程中出现代价高昂的错误,例如组件过多或无法创建健壮的逻辑。这篇文章将探讨为您的下一个项目设计可靠架构的一些内容。
确定主要业务需求设计架构的第一步是了解软件的需求。这些是主要的业务需求,应该记录在一个文档中,以便以后参考。
以下问题将帮助您确定这些要求:
- 你们产品的主要特点是什么?
- 为客户解决什么样的业务问题?
- 用户将如何与该系统(例如,移动应用程序)或流程(例如,呼叫中心)进行交互?
您需要知道许多因素会影响应用程序开发项目的成功或失败。尽管如此,有一件事最突出:精心设计的架构将使您的软件在未来更加可靠和易于构建。
建立可视化编程模型可视化编程模型表示组件之间的交互、它们如何相互关联以及这些关系如何随时间变化。一个很好的例子是一个面向对象的程序,其中类表示数据,函数(或方法)用于操作它。
创建有效的组件模型实用的组件模型是一组易于使用、理解和维护的组件。它为创建健壮的架构提供了必要的构建块。
一个实用的组件模型可以分为两种类型:
- 一个松散耦合的模型,其中每个组件都有其范围(单一职责)并且不会干扰其他功能的工作。这有助于通过限制应用程序不同部分之间的依赖关系来保持代码库的小而干净,从而使开发人员更容易理解每个部分的作用,而无需直接查看它们的所有相互依赖关系。
- 一个紧密耦合的模型,其中所有组件都通过接口或抽象类互连,允许您在自己的应用程序中轻松重用来自其他应用程序的现有代码
如果您可以构建一个易于使用并快速交付结果的系统会怎样?如果您能以最少的时间浪费在开发上,将您的产品推出市场会怎样?您会有对购买感到满意的客户,对吗?
嗯,是的——但这还不够。您的软件需要经过设计,使其能够经受住时间的考验。它必须是稳定的、可扩展的和安全的,您的业务模型才能随着时间的推移而成功。
选择适合您组织需求的示例架构
您的架构应该基于您组织的需求,而不仅仅是您认为最好的。例如,如果您在 IT 部门工作并希望确保您的所有应用程序都能顺利运行,那么 BizTalk 基础架构可能最适合您。但是,如果您在一家只有一两名员工的小公司工作,他们没有时间学习如何使用 SQL Server 或其他专门的软件工具,那么让他们访问这些类型的工具就没有意义了。资源,除非他们愿意学习新技能,并且在工作时间不会造成太多干扰。
拥有良好的架构设计对于软件开发的成功至关重要这就好比房屋的地基,如果不够牢固,其他的一切都会土崩瓦解。
尽早建立原型原型是让你的想法和想法下来的最好方法,但它也是消除任何问题的快速方法。您可以使用其他人已经为您编写的现有代码;无论是来自 GitHub 还是 Google Docs,大量示例都可以帮助您快速启动原型。
不要拘泥于需求。在软件架构的早期阶段,最好关注概念而不是最终需求。开始考虑软件架构的最佳时机是在给出任何需求之前。最好关注概念而不是最终要求。这将帮助您为设计奠定坚实的基础,并避免因过于复杂的条件而陷入困境,这些条件可能会在流程的后期引起问题。
要开始这个过程,请考虑三大类:业务目标、技术能力和战略(包括数据结构)以及组织结构/角色/职责。这三个类别通常被称为“需要”,但它们不仅仅是需要;它们也是你想用你的软件系统完成的事情——而且这些事情不必仅仅受限于你认为它们应该是什么!
使用行业标准的构建块设计架构时要做的最重要的事情之一是使用行业标准的构建块。从长远来看,这将使您的生活更轻松,因为您不必每次构建新软件时都重新发明轮子。
假设您使用的是开源编程语言,例如 Ruby on Rails 或 Python。在这种情况下,大量的库可以帮助您完成日常任务,例如数据库访问和 Web 服务。另一方面,如果您使用 Java,一些工具允许具有不同技能水平的开发人员访问他们的代码库,而无需学习另一种语言(如 Spring)。
确保这足够灵活以适应开发过程中的变化- 遵循行业标准框架或方法,例如 Zachman 框架或 TOGAF 架构开发方法 (ADM)。确保这足够灵活以适应开发过程中的变化。
- 使用包括所有利益相关者、客户、业务分析师、项目经理和架构师的系统方法。
有许多成熟的设计模式;使用它们将帮助您的软件架构更加灵活和可维护
软件架构是系统的结构和组织。它可以被认为是系统的不同部分如何互连、它们之间的数据流以及这些相互依赖关系将如何随时间变化的大纲。
软件架构旨在确保代码库足够灵活,可以在不破坏现有功能或增加不必要的复杂性的情况下进行调整。
选择合适的软件架构模式(例如,客户端-服务器架构)您应该选择一种众所周知的模式,而不是您发明的模式,以便其他开发人员在以后维护您的代码时可以更快地理解它。
例如,如果您正在为公共领域构建应用程序并且不打算对其收费,那么使用客户端-服务器模型是有意义的,因为它更灵活并且允许快速开发。但是如果你想从你的产品或服务(或两者)中赚钱,使用网络服务器可能没有吸引力,因为它们不像电子商务网站那样直接产生收入。在这种情况下,实体关系图可能更适合,因为它们往往不如关系数据库或对象数据库复杂——它们更容易构建和维护,因为在管理数据关系表时不涉及任何 SQL 语句。 ER图。
概述您要构建的内容如果您定义了要构建的内容,那将是最好的。
你不必确切地知道它是如何工作的,但你应该知道结果是什么样子的。
定义系统要求在这里,您可以定义用户的需求以及他们想要的方式。需求的编写方式应使其易于理解、实用且可实现。
在定义需求时,您可以使用多种技术:
- 首先,使用利益相关者访谈或调查来获取他们对系统设计的意见;这将帮助您了解他们的需求、他们在当前策略中遇到的问题以及如何用您的策略解决这些问题。
- 分析现有软件包以获取灵感;看看是否有任何类似的程序可以做与你的类似的事情,或者其他人是否已经用他们的解决了这个问题。这样,您将无需重新发明轮子,从而节省时间!
设计软件架构的第一步是分析风险和约束。这可以通过确定您的项目需要什么以及您需要将资源放在哪里来完成。
这应该包括以下内容:
- 这个应用程序将用于什么?
- 有多少用户将使用它?
- 我们是否有足够的时间和金钱来正确完成这项任务?
什么是结构?
结构是软件架构的蓝图。它描述了您应该如何组织代码,并帮助您了解数据的来源、去向以及它与系统其他部分的关系。
为您的架构建模构建架构的第一步是规划您希望系统做什么。这可以是简单的功能列表或应用程序每个部分的详细描述。无论您进入多少细节,都应尽快将其写下来,以便参与其中的每个人在开始处理单个作品之前都有一个最新的图片。
一旦您完成了设计并创建了软件工作原理的内部模型,就可以探索其他团队基于此模型实现自己的系统的不同方式。例如:如果需要多个用户一起在项目上进行协作,但每个用户只能在他们的团队中访问(“每个用户一个帐户”策略),那么可能一个帐户已经不够了;相反,也许两个版本应该使用一些共享工作区一起工作,每个成员都可以使用所有必要的工具,而不会影响密码管理策略或加密密钥等安全设置。
识别用户角色尽早在流程中识别用户角色很重要。这将帮助您清楚地了解您正在为谁设计以及他们如何使用您的软件,这将为其他一切提供信息。
例如,您可以有一个由设计师、开发人员和产品经理组成的团队,他们都在同一个项目上工作(通常称为“创意”)。如果他们都足够紧密地合作以分享想法并协调他们的努力以实现一个目标——比如构建一个应用程序——那么这三个角色在这个团队中由佩戴它们的人代表是有意义的(或者至少可以访问)。
创建基础架构图软件基础架构图直观地表示系统和应用程序之间的关系。它显示了每个系统如何与其他组件相关,包括它们如何相互通信、它们在哪里运行以及它们使用什么资源。此图的目标是帮助您从高层次理解您的架构,以便您可以在不破坏其他任何内容的情况下进行更改。
可视化关键路径您可以使用可视化工具来帮助您可视化您的设计。例如,图表和线框图工具非常适合这一点。
一旦您了解了每个功能的作用,您就会开始考虑这些功能如何相互交互。一种方法是使用流程图方法:画出两点之间的所有可能路径(使用箭头),然后考虑这些路径在它们沿它们移动时如何相互影响。这将有助于确定系统的任何部分是否需要改进或重新设计
描述关键组件- 文档例外。
异常是正在使用的软件的自然结果,如果您没有很好地记录它们,它们可能很难处理。最好的方法是制作一个单独的部分,在其中列出特定功能或系统可能出现的所有问题,以及每个问题的可能解决方案。然后,当有人遇到异常(这不是他们的错)时,他们将拥有自己修复它所需的所有信息 - 并希望避免自己在以后不得不处理问题!
设计软件架构是一个复杂但必不可少的过程设计软件架构是一个复杂但必不可少的过程。这很像建造房子:从地基开始,然后一直到屋顶和上层,最后进行收尾工作。首先,您需要了解您希望构建系统的结构类型——这将决定设计它需要多少时间和精力。
要使软件架构正常运行,它需要所有三个部分:设计(结构)、实施(我们如何构建计划)和维护(保持一切顺利运行)。例如,假设任何元素运行得不够好或太复杂而无法发出声音。在这种情况下,当有人在开发项目或维护任务中再次尝试使用它们时,他们可能会在他们完全构建完他们的产品后再次使用它们!
概述架构模式概述架构模式将帮助您更好地了解您的软件并更快地开发解决方案。当然,如果本章提到的任何设计适用于您的问题域,您都可以使用它们。尽管如此,重要的是要记住,不同的人在设计架构时有不同的要求和偏好。
创建架构的第一步是概述需要做什么以及谁将负责每项任务。下一步是通过将这些任务分解为称为模块或组件的较小部分来定义应如何执行这些任务(我们稍后将讨论这些)。最后,一旦所有的东西都被绘制出来,你需要弄清楚所有这些部分是如何组合在一起的——这部分称为集成或编排!
与利益相关者一起验证架构设计下一步是与利益相关者一起验证架构设计。这将帮助您了解他们的想法和感受。如果对架构的某些方面有任何异议或疑虑,您可以通过更改来满足它们来解决它们。
例如,假设利益相关者认为组件之间分担了太多责任。在这种情况下,这可能意味着他们希望添加一些特定的功能,以便每个元素都有更多的任务要做,而不是简单地与其他组件共享功能(或者可能创建新的)。您可能还会发现一个利益相关者认为现有部件应该添加其他功能,因为这些功能将有助于解决其他用户的问题——这可能是有用的信息!
结论虽然创建架构具有挑战性,但也令人欣慰。一旦您有了良好的架构设计,您将能够构建更强大且可维护的软件,随着组织的发展,随着时间的推移,这些软件将更容易更新。此外,拥有扎实的架构设计意味着您可以专注于开发功能,而不是花费数小时尝试一个一个地构建它们,因为除非首先设计正确,否则它们将无法正常工作!