官方服务微信:dat818 购买与出租对接

欢迎获取专属项目实战等福利,全栈博客项目更新中及软件设计基础

3万

主题

2

回帖

10万

积分

管理员

积分
102141
发表于 昨天 21:03 | 显示全部楼层 |阅读模式
    热烈欢迎您的加入,您将享受到:定制的项目实战机会、专业的Java学习路径、一对一的答疑解惑、每日学习打卡服务以及赠送的图书福利。

    全栈前后端分离博客项目1.0版本现已圆满结束,2.0版本正在紧锣密鼓地更新中,演示链接请查阅,整个开发过程全程指导,涵盖后端与前端的全栈开发,从零开始详细讲解每个功能的开发步骤,提供一对一答疑服务,直至项目成功上线。目前已完成170个章节,总字数超过27万字,配有1162张讲解图,目前仍在努力更新中。未来还将推出更多新项目,旨在涵盖Java领域内的典型项目,包括但不限于秒杀系统、在线购物平台、即时通讯软件以及云计算等。

<p style='margin-bottom:15px;color:#555555;font-size:15px;line-height:200%;text-indent:2em;'>    <pre style="outline: 0px;letter-spacing: 0.544px;font-variant-ligatures: common-ligatures;font-weight: 700;orphans: 4;widows: 1;word-spacing: 1px;caret-color: rgb(255, 0, 0);color: rgb(0, 0, 0);"></pre></p>
    今日,我们将探讨软件设计文档的基本概念,以便你在后续案例学习中,能更深刻地认识到文档是如何构建其结构的。

    设想一下这样的情景:若公司委派你担任架构师一职,负责在项目开发初期阶段进行软件架构的规划,你将如何着手进行工作?你又将如何呈现你的工作成效?又该如何验证你的设计方案是否符合用户的具体需求?你是否有信心确保最终交付的软件产品能够达到既定标准?你是否能够确保团队成员明确各自的职责边界,并高效地完成开发任务……

    这些问题实质上是软件开发管理和技术架构的关键需求,架构师的主要职责在于精心进行软件设计,以应对这些需求。一旦这些问题得到妥善解决,软件的开发过程及其成果也将得到有效保障。那么,如何实现这些需求呢?我们主要采用软件建模的方法,并将这些软件模型整理成一份具有价值的软件设计文件。

    软件建模

    所谓软件建模,就是为要开发的软件建造模型。

    模型是对现实世界的概括表达,如广为人知的物理方程式E=mc²,便是质量与能量相互转换规律的数学化表述。除却物理方程式,模型的形式多样,例如地图是对地理区域的模拟;机械、电子设备以及建筑设计中的各类图纸,都是对具体物理实体的模仿。同样,软件也可以通过不同的图形来进行构建。

    软件系统规模庞大且结构复杂,借助软件建模技术,我们能够提炼出软件系统的核心特性和构成要素,并对这些关键要素之间的相互关系进行梳理。在软件开发阶段,遵循模型所设定的限制进行开发,这样就能确保整个系统的结构和关系处于可控状态。相关人员自始至终对软件的整体架构和现有进度有着明确的认识,各个开发工程师能够清楚地把握自己负责模块与其他同事工作之间的联系和相互依赖,并据此构建相应的代码。

    我们究竟依据何种标准来构建软件模型呢?要解答这一问题,首先必须了解,在软件开发领域,存在两种不容忽视的客观事实。

    我们面临着一个需要解决的特定领域问题。以开发电子商务网站为例,这其中的客观问题涉及如何开展商业活动;对于卖家而言,包括商品、订单和客户服务的管理,而买家则需要关注商品选择、订单提交及支付方式等。对这些客观问题的概括,可以归结为各类功能及其相互联系、各类模型对象及其相互关系,以及各类业务处理流程。

    存在另一个客观事实,那就是最终形成的软件系统。该系统需解决的难题涵盖:软件由哪些核心类构成,这些类如何排列组合形成独立的模块,这些类与模块间的相互依赖性如何,运行时如何调用,需要部署多少台服务器,以及服务器之间如何进行信息交流等。

    对这两个客观现象进行抽象化分析的工具,正是我们所使用的软件模型。

    图片

    我们要对特定领域的相关问题以及拟开发的软件系统进行详尽的分析、精心地设计以及抽象化处理,同时,我们依据这些抽象化后的模型展开开发工作,最终打造出一个完整的软件系统,这一系列步骤构成了软件开发的核心流程。而针对领域问题及软件系统进行深入分析、精心设计和抽象化的过程,我们称之为软件建模设计。

    软件设计方法

    软件设计本质上就是构建软件模型的过程,借助软件建模工具,我们能够绘制出软件模型,进而完成软件设计的任务。

    在实际操作中,我们通常采用的软件建模与绘图工具是 UML,即统一建模语言。UML 涵盖了 10 种软件模型,其中,类图、序列图、组件图、部署图、用例图、状态图和活动图等 7 种模型被广泛使用。

    接下来,我们简要地认识一下这七种常见的UML图的应用场合及其基础示例。在后续的专栏设计文档里,你将频繁遇到这些图,多看几次,自然就能理解,进而能够绘制它们。当然,如果你有意愿深入掌握UML的相关知识,我同样热情地支持,并强烈建议你阅读马丁·富勒所著的《UML精粹》这本书。

    类图

    类图是UML图形中最为普遍的一种,其主要功能在于阐述各类的属性以及它们之间的静态联系。

    一个类别由三部分构成:其名称、属性清单以及方法清单。在类别之间,存在着六种静态联系:它们包括关联、依存、组合、聚合、继承以及泛化。若将一组相关的类别及其相互关系以图形的形式展现,便形成了所谓的类图。

    在后续的授课环节,您将有机会接触到这样一幅图像,那便是所谓的类图。您可以将我之前所提及的类图构成要素与该图像逐一进行比对,从而深刻体会类图的实际应用。

    图片时序图

   


    除了类图之外,还有一种常见的是时序图。类图主要展现的是各类之间的静态联系,而时序图则专注于描绘参与者间的动态调用过程。

    图片组件图

    组件通常比类别粒度更大,其内部往往汇集了众多类。在不少情况下,组件图的用途与包图相似。它通常被用于描绘实际存在的组件,例如 JAR 文件、DLL 文件等。在模块设计的实际操作中,我们更频繁地运用组件图。

    图片

    组件图能够展示组件间的静态联系,尤其是它们之间的依赖关系;若需描绘组件间的动态调用过程,则应采用组件时序图,该图以组件为参与主体,详细阐述它们之间的信息传递和调用互动。

    部署图

    部署图详尽地展现了软件系统的最终部署状况,包括所需服务器的数量,以及关键组件分别部署在哪些服务器之上。

    图片

    部署图描绘了软件系统最终的物理布局,通过它,客户、管理层以及工程师等各方可以直观地把握到系统在实际运行时的物理形态,以及与现有服务器及第三方服务器的关联。此外,借助部署图,我们还能对服务器及第三方软件的采购费用进行预估。

    部署图作为软件设计模型中较为宏观的一种图表,需在设计的初期阶段绘制。借助部署图,各方参与者能够对设计方案进行深入讨论,以判断其是否得到普遍认可。只有当大家对部署图的内容达成一致意见,后续的详细设计工作才能得以顺利进行。

    用例图

    用例图通过反映用户和软件系统的交互,描述系统的功能需求。

    图片

    图中的形象元素称作角色,它既可以是人类角色,亦可是其他系统角色。系统功能可能相当繁复,因此一张用例图往往仅展示了其中的一小部分功能。这些功能被一个矩形框所围合,该矩形框即是用例的边界。框内的椭圆代表各个功能单元,这些功能单元之间既能相互调用,亦能实现功能的拓展。

    状态图

    状态图用来展示单个对象生命周期的状态变迁。

    在业务系统中,众多关键领域对象均呈现出相对繁杂的状态转变过程,诸如账号,其状态包括但不限于创建、激活、冻结以及欠费等。同时,用户、订单、商品、红包等常见领域模型亦存在多样化的状态。

    用例图中可以通过文字来展现这些状态的变化,伴随角色的不同操作而有所调整。然而,采用此法描述时,状态信息分布零散,不仅开发过程中容易出错,即便是在产品经理进行设计阶段,也常常难以准确把握对象的状态演变。

    UML的状态图对此问题处理得相当出色,它通过一张图来展示一个对象在其生命周期中经历的不同状态,以及这些状态之间的转换关系。以图为例,门的状况可分为开启、关闭和锁定三种,而这些状态及其转换过程均能通过单一的状态图清晰呈现。

    图片活动图

    活动图主要用于阐述事件发展的顺序和业务操作的步骤。在统一建模语言(UML)中,并未包含流程图这一元素,因此,在多数情况下,人们会采用活动图来替代流程图的功能。

    图片

   


    活动图与早期流程图在图形元素上有着诸多相似之处,例如,实心圆通常用来标识流程的起始点,而空心圆则用来表示流程的终结,圆角矩形则用于描绘具体的活动步骤,菱形则象征着流程中的判断分支。

    除此之外,活动图中引入了一个关键要素——泳道划分。依据活动的覆盖范围,活动可以被细致地按照领域、系统以及角色等因素分配至各个泳道,从而使得流程的界限变得更加明确。

    我们先前已对UML建模中的7种典型模型进行了阐述,接下来,我们将探讨这7种模型各自适用于软件设计的哪个环节,以及它们旨在传达何种设计理念。

    软件文档设计

    软件设计文档构成了架构师的核心工作产出,其中需详细阐述本文伊始所提及的各项要求,全面展示软件的整体设计图景,而该文档的核心内容便是软件模型。

    软件开发流程可以被划分为需求解析、概要设计以及详细设计三个主要步骤。

    在各个设计环节,我们采用多种UML模型对特定领域或系统进行建模,接着将相应的模型与必要的文字注释一同整理成文,进而形成一份完整的软件设计文件。

    我们专栏内所呈现的十余个软件设计案例,均以这种模式编排,在学习过程中,你不仅能掌握不同系统软件的设计方法,同时还能学习到设计文档的撰写技巧。

    设计文档的编写并无固定模式,关键在于文档能否充分传达架构师的全部设计构想。不同的读者群体有着各自的关注焦点,例如老板、客户、运维人员、测试工程师以及开发团队,他们各自期望从文档中获取的信息也大相径庭。

    客户与测试团队往往聚焦于功能的实现与逻辑的优化,而管理层及运维团队则可能更加重视系统的非功能性需求以及整体架构的构建,与此同时,开发人员可能对整个架构及其关键技术点的细节更为关注。

    本专栏案例主要面向开发者视角进行撰写,阅读过程中,您会发现我的行文风格与一般专栏文章存在显著差异,用词上显得更为直接,文字与读者之间似乎存在一定的距离,这正是设计文档所固有的特点。

    架构、系统,文档、相关人员之间的关系可以参考下面这张图。

    图片

    每个软件系统都必须具备一个架构,而每个架构则由多个架构元素构成。这些元素涵盖了之前提到的服务器、组件、类、消息、用例、状态等。那么,这些元素之间存在着怎样的联系?我们又该如何将它们有效整合?我们可以借助部署图、组件图、时序图等不同类型的模型图来进行描述。

    构建一个架构最终需要一份文档来承载其内容,将相应的模型图纳入此文档,并附上相应的文字解释,便形成了一份架构设计文档。此类文档旨在供人们阅读,而阅读者正是系统的各个相关方。由于不同相关方的关注点各异,因此需要通过不同的模型图来呈现,故架构师需根据不同相关方的需求,选用不同的模型图来生成各自的架构文档。

    小结

    在软件开发活动启动之前,需对所要解决的业务难题以及拟构建的软件系统进行深思熟虑,进而将这一系列思考成果以软件模型的形式呈现出来。

    人类作为自然界中的智慧生命,其显著特征在于,在采取行动之前,已在心中预先构思了行动的步骤与预期效果,并据此绘制出一份详细的计划。早在我们的祖先将第一块石头磨制成石器的时代,这种能力便已显现。在软件系统开发的这一复杂智力活动中,我们参与者更需具备绘制蓝图并将其付诸实施的能力。

    “元宇宙”这个词如今相当流行,“元”这个字通俗来说,指的是一切起源的所在,它关乎如何用概念来定义自身,属于在抽象之上的再抽象。这种“元”概念对于架构师来说,显得尤为关键。架构师必须精通各种技术背后的深层技术,洞察各种问题背后的本质,才能突破眼前的种种限制,创造出面向未来的架构设计。

    欢迎,你将获得:专属的项目实战 / Java 学习路线 /一对一提问 / 学习打卡/ 赠书福利

    全栈前后端分离博客项目 1.0 版本完结啦,2.0 正在更新中...,演示链接:,全程手摸手,后端 + 前端全栈开发,从 0 到 1 讲解每个功能点开发步骤,1v1 答疑,直到项目上线。目前已更新了170小节,累计27w+字,讲解图:1162张,还在持续爆肝中..后续还会上新更多项目,目标是将Java领域典型的项目都整一波,如秒杀系统, 在线商城, IM即时通讯, Cloud  等等,

<p style='margin-bottom:15px;color:#555555;font-size:15px;line-height:200%;text-indent:2em;'>    <pre style="outline: 0px;letter-spacing: 0.544px;font-variant-ligatures: common-ligatures;font-weight: 700;orphans: 4;widows: 1;word-spacing: 1px;caret-color: rgb(255, 0, 0);color: rgb(0, 0, 0);"></pre></p>
<p style='margin-bottom:15px;color:#555555;font-size:15px;line-height:200%;text-indent:2em;'>    <pre style="font-size: 16px;letter-spacing: 0.544px;text-align: left;outline: 0px;font-variant-ligatures: common-ligatures;font-weight: 700;orphans: 4;widows: 1;word-spacing: 1px;caret-color: rgb(255, 0, 0);color: rgb(0, 0, 0);"><pre style="outline: 0px;letter-spacing: 0.544px;"><section data-tool="mdnice编辑器" data-website="https://www.mdnice.com" style="padding-right: 10px;padding-left: 10px;outline: 0px;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, "PingFang SC", Cambria, Cochin, Georgia, Times, "Times New Roman", serif;white-space: normal;font-size: 15px;line-height: 1.6;word-break: break-word;letter-spacing: 0.05em;color: rgb(89, 89, 89);"></section><pre style="outline: 0px;letter-spacing: 0.544px;font-size: 15px;color: rgb(89, 89, 89);font-family: -apple-system, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;white-space: normal;"><pre style="outline: 0px;letter-spacing: 0.544px;color: rgb(0, 0, 0);font-size: 16px;"><pre data-darkmode-bgcolor-15923650965579="rgb(36, 36, 36)" data-darkmode-original-bgcolor-15923650965579="rgb(255, 255, 255)" data-darkmode-color-15923650965579="rgb(167, 167, 167)" data-darkmode-original-color-15923650965579="rgb(63, 63, 63)" data-style="letter-spacing: 0.544px; font-size: 16px; color: rgb(63, 63, 63); word-spacing: 1px; line-height: inherit;" style="outline: 0px;color: rgb(63, 63, 63);letter-spacing: 0.544px;line-height: inherit;"><section data-mpa-template-id="1250" data-mpa-color="#ffffff" data-mpa-category="divider" data-darkmode-bgcolor="rgb(36, 36, 36)" data-darkmode-original-bgcolor="rgb(255, 255, 255)" data-darkmode-color="rgb(230, 230, 230)" data-darkmode-original-color="rgb(0, 0, 0)" data-style="margin-right: 0.5em; margin-left: 0.5em; white-space: normal; font-family: -apple-system-font, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif; color: rgb(0, 0, 0); letter-spacing: 0px; word-spacing: 2px;" data-darkmode-bgcolor-15923650965579="rgb(36, 36, 36)" data-darkmode-original-bgcolor-15923650965579="rgb(255, 255, 255)" data-darkmode-color-15923650965579="rgb(230, 230, 230)" data-darkmode-original-color-15923650965579="rgb(0, 0, 0)" style="margin-right: 0.5em;margin-left: 0.5em;outline: 0px;white-space: normal;font-family: -apple-system-font, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;color: rgb(0, 0, 0);letter-spacing: 0px;word-spacing: 2px;"><section powered-by="xiumi.us" data-darkmode-bgcolor="rgb(36, 36, 36)" data-darkmode-original-bgcolor="rgb(255, 255, 255)" data-darkmode-color="rgb(138, 138, 138)" data-darkmode-original-color="rgb(89, 89, 89)" data-style="margin: 10px 0em; color: rgb(89, 89, 89); letter-spacing: 0.544px;" data-darkmode-bgcolor-15923650965579="rgb(36, 36, 36)" data-darkmode-original-bgcolor-15923650965579="rgb(255, 255, 255)" data-darkmode-color-15923650965579="rgb(138, 138, 138)" data-darkmode-original-color-15923650965579="rgb(89, 89, 89)" style="margin: 10px 0em;outline: 0px;color: rgb(89, 89, 89);letter-spacing: 0.544px;"><section data-darkmode-bgcolor="rgb(36, 36, 36)" data-darkmode-original-bgcolor="rgb(255, 255, 255)" data-darkmode-color="rgb(138, 138, 138)" data-darkmode-original-color="rgb(89, 89, 89)" data-darkmode-bgcolor-15923650965579="rgb(36, 36, 36)" data-darkmode-original-bgcolor-15923650965579="rgb(255, 255, 255)" data-darkmode-color-15923650965579="rgb(138, 138, 138)" data-darkmode-original-color-15923650965579="rgb(89, 89, 89)" style="margin-right: 0em;margin-left: 0em;padding: 10px;outline: 0px;display: inline-block;width: 556px;border-width: 2px;border-style: dotted;border-color: rgb(192, 200, 209);"><section powered-by="xiumi.us" data-darkmode-bgcolor="rgb(36, 36, 36)" data-darkmode-original-bgcolor="rgb(255, 255, 255)" data-darkmode-color="rgb(138, 138, 138)" data-darkmode-original-color="rgb(89, 89, 89)" data-darkmode-bgcolor-15923650965579="rgb(36, 36, 36)" data-darkmode-original-bgcolor-15923650965579="rgb(255, 255, 255)" data-darkmode-color-15923650965579="rgb(138, 138, 138)" data-darkmode-original-color-15923650965579="rgb(89, 89, 89)" style="margin-right: 0em;margin-left: 0em;outline: 0px;font-size: 13px;line-height: 2;letter-spacing: 2px;">1. 我的私密学习小圈子~
    <span style="outline: 0px;color: rgb(106, 104, 111);">2. 还再用 Navicat?试试这款正版 MySQL 客户端,真香!</span>
    <span style="outline: 0px;color: rgb(106, 104, 111);">3. 如何在SpringBoot中优雅地重试调用第三方API?</span>
    4. MyBatis-Plus 可视化代码生成器来啦,让你的开发效率大大提速!!
</section></section></section></section><pre data-darkmode-bgcolor-15923650965579="rgb(36, 36, 36)" data-darkmode-original-bgcolor-15923650965579="rgb(255, 255, 255)" data-darkmode-color-15923650965579="rgb(138, 138, 138)" data-darkmode-original-color-15923650965579="rgb(89, 89, 89)" data-style="letter-spacing: 0.544px; text-size-adjust: auto; word-spacing: 2px; color: rgb(89, 89, 89);" style="outline: 0px;letter-spacing: 0.544px;word-spacing: 2px;color: rgb(89, 89, 89);">    <span style="outline: 0px;font-family: Avenir, -apple-system-font, 微软雅黑, sans-serif;letter-spacing: 0.544px;color: rgb(120, 172, 254);font-size: 15px;">最近面试BAT,整理一份面试资料</span><span style="outline: 0px;font-family: Avenir, -apple-system-font, 微软雅黑, sans-serif;letter-spacing: 0.544px;color: rgb(61, 167, 66);font-size: 17px;">《Java面试BATJ通关手册》</span><span style="outline: 0px;font-family: Avenir, -apple-system-font, 微软雅黑, sans-serif;letter-spacing: 0.544px;color: rgb(120, 172, 254);font-size: 15px;">涵盖了Java的核心技术、JVM运行机制、Java并发编程、SSM框架、微服务架构、数据库管理以及数据结构等多个领域。</span>
    <span style="outline: 0px;color: rgb(120, 172, 254);font-size: 15px;">获取方式:点“</span><span style="outline: 0px;letter-spacing: 0.544px;line-height: 30px;color: rgb(61, 167, 66);font-size: 18px;">在看</span><span style="outline: 0px;color: rgb(120, 172, 254);font-size: 15px;">”,关注公众号并回复 </span><span style="outline: 0px;color: rgb(61, 167, 66);font-size: 18px;">Java</span><span style="outline: 0px;color: rgb(120, 172, 254);font-size: 15px;"> 领取,更多内容陆续奉上。</span>
</pre></p>
<p style='margin-bottom:15px;color:#555555;font-size:15px;line-height:200%;text-indent:2em;'>    <pre style="outline: 0px;letter-spacing: 0.544px;color: rgb(62, 62, 62);caret-color: rgb(60, 60, 60);"><pre style="font-size: 16px;font-variant-ligatures: common-ligatures;font-weight: 700;letter-spacing: 0.544px;orphans: 4;text-align: left;widows: 1;word-spacing: 1px;outline: 0px;color: rgb(62, 62, 62);caret-color: rgb(60, 60, 60);"><span style="outline: 0px;letter-spacing: 0.544px;text-align: left;font-size: 15px;color: rgba(0, 0, 0, 0.8);font-family: Optima-Regular, PingFangTC-light;">请注意,由于公众号调整了推送机制,若想不错过精彩内容,务必在阅读完毕后点击一下。</span>“<span style="outline: 0px;color: rgb(255, 0, 0);">在看</span>”<span style="outline: 0px;letter-spacing: 0.544px;text-align: left;font-size: 15px;color: rgba(0, 0, 0, 0.8);font-family: Optima-Regular, PingFangTC-light;">,加个</span>“<span style="outline: 0px;color: rgb(255, 0, 0);">星标</span>”<span style="outline: 0px;letter-spacing: 0.544px;text-align: left;font-size: 15px;color: rgba(0, 0, 0, 0.8);font-family: Optima-Regular, PingFangTC-light;">,这样每次新文章推送才会第一时间出现在你的订阅列表里。</span>
    <span style="outline: 0px;letter-spacing: 0.544px;text-align: left;font-size: 15px;font-family: Optima-Regular, PingFangTC-light;visibility: visible;color: rgb(255, 0, 0);">点“在看”支持小哈呀,谢谢啦</span>
</pre></p>
您需要登录后才可以回帖 登录 | 立即注册

Archiver|手机版|小黑屋|关于我们

Copyright © 2001-2025, Tencent Cloud.    Powered by Discuz! X3.5    京ICP备20013102号-30

违法和不良信息举报电话:86-13718795856 举报邮箱:hwtx2020@163.com

GMT+8, 2025-5-10 03:51 , Processed in 0.092685 second(s), 17 queries .