软件体系结构设计文档_一个java架构师是如何设计出一个好的架构的
一、架构的定义
所谓一千个架构师中有一千种“最好的架构”模式。
“架构”是我们行业中非常普遍的词,表示它也必须是经过长时间磨合后形成的词。 架构一词的含义是什么? 解决什么问题? 只有理解了这两个问题,我们才能设计出良好的项目结构。
我认为架构类似于绘制房屋设计。 当我们第一次建造一间只有一层的小房子时,我们拍了一下片刻。 我们有了一个大概的主意就开始着手建设。 在某些情况下,它不会出现。 但是,当您要建造架构物时,拍打额头的方法此时可能仍然有用,但是由于尚未仔细考虑,因此建造不可避免地会出现问题。 此外,建造架构物和建造一层平房所需的团队规模肯定是不同的。 每个人都有不同的标准。 如果没有统一的规范,可以想象最终结果。 因此,结构是设定规则和限制。 权衡各方的得失后,这是“最合理的决定”。 它指导团队中的每个人在意识形态水平上达成共识,以便最终产品由一个人完成。 结果一样。 此外,它还具有控制复杂性,改善团队协作,降低成本等功能。
在软件开发中,体系结构的意义不仅在于团队要达成共识,因为我们工作的本质是制作支持业务发展的更好的软件产品,因此体系结构也基于业务体系结构。 我认为良好的结构可以提前1到2年预测业务发展。 这样,可以支付合理的价格来换取技术领先的业务增长的影响。 我相信,大多数留在中小型公司的人都应该经历过被生意推开的时代。 每天,他们都会卡在这里,挂在这里,并在这里报告错误。 当我们遇到这些问题时,该花时间考虑当前体系结构是否存在问题了?
二、如何开始设计一个架构
进行体系结构最重要的一点是上述业务适配。 任何不基于业务去做异想天开的体系结构的流氓?
体系结构不像编写代码,对是对,对错是错,没有对错,这是一个选择的过程。 当我们从0开始构建架构时,确实更加困难。 尽管一开始很难做,但是良好的开端等于成功的一半,这将为我们的下一个工作打下坚实的基础。
让我们解释一下作者是如何从头开始亲自构建架构的,以供您参考和研究:
1.结构是整个过程->过程的一部分。 首先,有必要弄清楚整个公司/组织为外界提供的服务是什么? 这是最高级别的战略结构,一旦确定,基本上是很难或不可能更改的。
2.将解决方案划分为每个部分(例如SOA的特定服务)。 例如,根据公司的组织结构或产品。
3.找到每个解决方案的核心功能和支持功能。 并形成业务概览图。
4.分开很长时间,再分开很长时间。 根据当前实际资源情况做出最终决定。 这是整个过程中最耗时的一点。 它决定了体系结构的复杂性和开发成本。 该方法包括但不限于提取可重用函数,组合函数,以更细粒度划分函数以提高可重用性等。 所有这些决定必须是“正确的”。 不要盲目跟随微服务的风潮! 不要盲目跟随微服务的风潮! 不要盲目跟随微服务的风潮! 重要的事情说了3遍。 服务粒度越细,呼叫链接越复杂,以及它带来的开发成本是否适合团队,这是需要作为架构师考虑的一点。
5.在每个功能块之间建立协作模式,包括但不限于通信模式,通信协议,依赖关系等。
6.最后,这些应该形成最终的架构概述图,这可以帮助从更高的角度考虑架构的演变。 如果要重新架构现有项目,那么我们需要在上面的思考过程中对现有项目结构进行整理,作为参考信息的一部分。
三、一个好架构的特点
首先,您必须从心态上具有手工艺的精神,因为软件体系结构和房屋建造仍然有所不同。 一开始它没有到位。 一个好的设计必须被反复修改,从简单到复杂的循环验证,以及连续的抛光。
在的方向上,我认为有以下几点:
1.文档:无论是整个生命周期还是整个生命周期的一部分,都必须有充分的文档记录。 更改的来源包括但不限于BUG和要求。
2.高可用性:为了尽可能提高软件的可用性,我认为每个操作员都不愿意看到他的工作无法正常进行。 黑盒和白盒测试,单元测试,自动化测试,故障注入测试,提高测试覆盖率等逐步实现。
3.安全性:在组织运营过程中生成的数据具有商业价值,确保数据的安全性也是当务之急。 为了避免诸如XX门等丑闻。 加密,https等是常用方法。
4.可扩展:软件的设计坚持低耦合的概念,在合理的地方注意抽象。 它促进了功能更改,添加和应用技术的迭代,并支持在适当的时候对体系结构进行重构。
5.快速迭代:拥抱变化并抓住战略机遇。
6.高度自治:为了更好地支持第4点和第5点,每个功能都具有高度自治的好处是可以快速迭代,无论是功能迭代还是技术迭代,其影响 在整个系统上最小化。
7.高重用性:为了避免重复工作并降低成本,我们希望重用先前的代码和先前的设计。 这是最依赖于架构环境的。
8.可验证:一个好的框架需要考虑各种特殊情况,并且可以进行具体验证。
四、做架构中的误区
做任何事的时候需要不断的跳出原来的思维角度重新审视,这样才能避免陷入泥潭。列出几个我能想到的误区:
误区1——架构专门由架构师来做,业务开发人员无需关注:架构的再好,最终还是需要代码来落地,并且组织越大这个落地的难度越大。不单单是系统架构,每个解决方案每个项目也由自己的架构,如分层、设计模式等。如果每一块砖瓦不够坚固,那么整个系统还是会有崩塌的风险。所谓“千里之堤,溃于蚁穴”。
误区2——架构师确定了架构蓝图之后任务就结束了:架构不是“空中楼阁”,最终还是要落地的,但是架构师完全不去深入到第一线怎么知道“地”在哪?怎么才能落的稳稳当当。
误区3——不做出完美的架构设计不开工:世上没有最好架构,只有最合适的架构。我们需要的不是一下子造出一辆汽车,而是从单轮车 --> 自行车 --> 摩托车,最后再到汽车。想象一下2年后才能造出的产品,当初市场还存在吗?
五、结语
架构之路任重而道远。程序设计和架构设计是互通的,每个人都可以从设计好一个程序往设计好一个系统架构前进。
软件体系结构设计文档_一个java架构师是如何设计出一个好的架构的相关推荐
- java拼图游戏设计文档_基于JAVA的拼图游戏的设计与实现(含录像)
基于JAVA的拼图游戏的设计与实现(含录像)(任务书,开题报告,中期检查表,外文翻译,毕业论文15500字,程序代码,答辩PPT,答辩视频录像) 摘 要 在我们日常生活中,有很多的益智类游戏,如七巧 ...
- java打印文档_从Java应用程序打印文档?
我正在尝试创建一个能够直接从UI打印文档的Java UI . 我能够创建和使用Javax ServiceUI,但是当从ServiceUI中选择"Print"并调用DocJob上的p ...
- 软件开发技术文档_你知道,直播软件开发需要做的准备工作有哪些?
随着互联网技术的发展和智能手机的迅速普及,直播软件市场需求正在增长.那么直播平台的发展如何?在软件开发过程中应注意什么?直播软件开发需要做是准备工作有哪些? 1.直播软件开发方向: 一般而言,开发直播 ...
- 怎样查阅java的api文档_【java基础(十)】查阅API文档
为什么要查询API文档 就好比学习汉字,学习英语,都免不了要查询字典.词典.因为包含东西太多,切不必每个都需要学习.记住,在需要用的时候可以快速查询即可. String类就包含50多个方法,且几乎所有 ...
- java 图片 word文档_【Java】用Freemarker完美导出word文档(带图片)
Java 用Freemarker完美导出word文档(带图片) 前言 最近在项目中,因客户要求,将页面内容(如合同协议)导出成word,在网上翻了好多,感觉太乱了,不过最后还是较好解决了这个问题. ...
- [课业] 19 | 软工 | 软件体系结构设计与构建
文章目录 体系结构设计 体系结构设计过程 分析关键需求和项目约束 选择体系结构风格 进行软件体系结构逻辑设计(抽象) 依据概要功能需求与体系结构风格建立初始设计 概述 实践案例 使用非功能性需求与项目 ...
- python excel 打印文档_教你如何用Python轻轻松松操作Excel、Word、CSV,一文就够了,赶紧码住!!!...
原标题:教你如何用Python轻轻松松操作Excel.Word.CSV,一文就够了,赶紧码住!!! 作者:奈何缘浅wyj Python 操作 Excel 常用工具 数据处理是 Python 的一大应用 ...
- 一般性网络错误 请检查网络文档_如何编写好的软件设计文档
原文链接 作为一名软件工程师,我花了很多时间阅读和编写设计文档.在研究了数百篇这样的文档之后,我发现好的文档与项目成功之间有很强的关联性. 在本文中,我尝试去说明如何才能编写好的设计文档. 本文分为4 ...
- api数据接口文档_接口文档示例(Taobao/jd/pinduoduo/开放接口调用)
api数据接口文档_接口文档示例 本文主要是提供了一个接口文档的范文,内容修订历史.目录.时序图.接口要素描述.接口说明.使用示例.字典.FAQ. 使用MD格式文档(makedown),选择原因,容 ...
最新文章
- 内存对齐与ANSI C中struct型数据的内存布局 【转】
- git 分支合并到当前
- vue-router使用next()跳转到指定路径时会无限循环
- UA OPTI544 量子光学13 场的量子化描述
- C++中的 c_str() 函数
- mysql5.7 archive安装_对于Mysql 5.7.19 winx64 ZIP Archive的运用安装详细说明
- rabbitmq的启动命令和springboot整合使用rabbitmq
- openSSL命令、PKI、CA、SSL证书原理
- 聊聊flink的Execution Plan Visualization
- 求解相机参数Camera Calibration
- windows 2012 非pdc DC强行重置NTP
- 赛尔号登录器显示服务器未开启,赛尔号登录界面改版啦!
- 应用程序无法正常启动0xc0150002 解决方式
- 微信小程序转支付宝小程序注意事项
- 2022年,GIS专业要不要转战IT?
- shell笔记_重定向与文本处理命令
- 2017 Google IO 开发者大会直播入口
- ELK日志分析系统搭建以及springboot日志发送到ELK中
- SAS实验05 ——方差分析
- 单片机实验:矩阵式键盘输入识别
热门文章
- 【MyBatis】Mybatis的java对象名和数据库表名不同怎么办?
- dart系列之:在dart中使用packages
- 在linux服务器上安装Jenkins
- Java中的Atomic包使用指南
- Java多线程之线程的可见性(二)
- Codeup墓地-问题 D: 最短路径
- 深入浅出,对于代理模式的理解(代理模式与外观模式的区别)
- 【GIF动画+完整可运行源代码】C++实现 插入排序——十大经典排序算法之三
- python opencv图片放大 缩小_Python OpenCV之图片缩放的实现(cv2.resize)
- python登陆界面代码_python编辑用户登入界面的实现代码