一、架构的定义

  所谓一千个架构师中有一千种“最好的架构”模式。

  “架构”是我们行业中非常普遍的词,表示它也必须是经过长时间磨合后形成的词。 架构一词的含义是什么? 解决什么问题? 只有理解了这两个问题,我们才能设计出良好的项目结构。

  我认为架构类似于绘制房屋设计。 当我们第一次建造一间只有一层的小房子时,我们拍了一下片刻。 我们有了一个大概的主意就开始着手建设。 在某些情况下,它不会出现。 但是,当您要建造架构物时,拍打额头的方法此时可能仍然有用,但是由于尚未仔细考虑,因此建造不可避免地会出现问题。 此外,建造架构物和建造一层平房所需的团队规模肯定是不同的。 每个人都有不同的标准。 如果没有统一的规范,可以想象最终结果。 因此,结构是设定规则和限制。 权衡各方的得失后,这是“最合理的决定”。 它指导团队中的每个人在意识形态水平上达成共识,以便最终产品由一个人完成。 结果一样。 此外,它还具有控制复杂性,改善团队协作,降低成本等功能。

  在软件开发中,体系结构的意义不仅在于团队要达成共识,因为我们工作的本质是制作支持业务发展的更好的软件产品,因此体系结构也基于业务体系结构。 我认为良好的结构可以提前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架构师是如何设计出一个好的架构的相关推荐

  1. java拼图游戏设计文档_基于JAVA的拼图游戏的设计与实现(含录像)

    基于JAVA的拼图游戏的设计与实现(含录像)(任务书,开题报告,中期检查表,外文翻译,毕业论文15500字,程序代码,答辩PPT,答辩视频录像) 摘  要 在我们日常生活中,有很多的益智类游戏,如七巧 ...

  2. java打印文档_从Java应用程序打印文档?

    我正在尝试创建一个能够直接从UI打印文档的Java UI . 我能够创建和使用Javax ServiceUI,但是当从ServiceUI中选择"Print"并调用DocJob上的p ...

  3. 软件开发技术文档_你知道,直播软件开发需要做的准备工作有哪些?

    随着互联网技术的发展和智能手机的迅速普及,直播软件市场需求正在增长.那么直播平台的发展如何?在软件开发过程中应注意什么?直播软件开发需要做是准备工作有哪些? 1.直播软件开发方向: 一般而言,开发直播 ...

  4. 怎样查阅java的api文档_【java基础(十)】查阅API文档

    为什么要查询API文档 就好比学习汉字,学习英语,都免不了要查询字典.词典.因为包含东西太多,切不必每个都需要学习.记住,在需要用的时候可以快速查询即可. String类就包含50多个方法,且几乎所有 ...

  5. java 图片 word文档_【Java】用Freemarker完美导出word文档(带图片)

    Java  用Freemarker完美导出word文档(带图片) 前言 最近在项目中,因客户要求,将页面内容(如合同协议)导出成word,在网上翻了好多,感觉太乱了,不过最后还是较好解决了这个问题. ...

  6. [课业] 19 | 软工 | 软件体系结构设计与构建

    文章目录 体系结构设计 体系结构设计过程 分析关键需求和项目约束 选择体系结构风格 进行软件体系结构逻辑设计(抽象) 依据概要功能需求与体系结构风格建立初始设计 概述 实践案例 使用非功能性需求与项目 ...

  7. python excel 打印文档_教你如何用Python轻轻松松操作Excel、Word、CSV,一文就够了,赶紧码住!!!...

    原标题:教你如何用Python轻轻松松操作Excel.Word.CSV,一文就够了,赶紧码住!!! 作者:奈何缘浅wyj Python 操作 Excel 常用工具 数据处理是 Python 的一大应用 ...

  8. 一般性网络错误 请检查网络文档_如何编写好的软件设计文档

    原文链接 作为一名软件工程师,我花了很多时间阅读和编写设计文档.在研究了数百篇这样的文档之后,我发现好的文档与项目成功之间有很强的关联性. 在本文中,我尝试去说明如何才能编写好的设计文档. 本文分为4 ...

  9. api数据接口文档_接口文档示例(Taobao/jd/pinduoduo/开放接口调用)

    api数据接口文档_接口文档示例 本文主要是提供了一个接口文档的范文,内容修订历史.目录.时序图.接口要素描述.接口说明.使用示例.字典.FAQ.  使用MD格式文档(makedown),选择原因,容 ...

最新文章

  1. 内存对齐与ANSI C中struct型数据的内存布局 【转】
  2. git 分支合并到当前
  3. vue-router使用next()跳转到指定路径时会无限循环
  4. UA OPTI544 量子光学13 场的量子化描述
  5. C++中的 c_str() 函数
  6. mysql5.7 archive安装_对于Mysql 5.7.19 winx64 ZIP Archive的运用安装详细说明
  7. rabbitmq的启动命令和springboot整合使用rabbitmq
  8. openSSL命令、PKI、CA、SSL证书原理
  9. 聊聊flink的Execution Plan Visualization
  10. 求解相机参数Camera Calibration
  11. windows 2012 非pdc DC强行重置NTP
  12. 赛尔号登录器显示服务器未开启,赛尔号登录界面改版啦!
  13. 应用程序无法正常启动0xc0150002 解决方式
  14. 微信小程序转支付宝小程序注意事项
  15. 2022年,GIS专业要不要转战IT?
  16. shell笔记_重定向与文本处理命令
  17. 2017 Google IO 开发者大会直播入口
  18. ELK日志分析系统搭建以及springboot日志发送到ELK中
  19. SAS实验05 ——方差分析
  20. 单片机实验:矩阵式键盘输入识别

热门文章

  1. 【MyBatis】Mybatis的java对象名和数据库表名不同怎么办?
  2. dart系列之:在dart中使用packages
  3. 在linux服务器上安装Jenkins
  4. Java中的Atomic包使用指南
  5. Java多线程之线程的可见性(二)
  6. Codeup墓地-问题 D: 最短路径
  7. 深入浅出,对于代理模式的理解(代理模式与外观模式的区别)
  8. 【GIF动画+完整可运行源代码】C++实现 插入排序——十大经典排序算法之三
  9. python opencv图片放大 缩小_Python OpenCV之图片缩放的实现(cv2.resize)
  10. python登陆界面代码_python编辑用户登入界面的实现代码