您当前的位置:首页 > 电脑百科 > 程序开发 > 架构

到底什么是软件架构?

时间:2020-07-14 11:28:13  来源:  作者:

很多人都在谈论那件事,但实际上只有少数人在谈论

有时会有人提到这个词。 在最多样化的环境中。 这个词曾被用来表达许多不同的事物,当一个单词可以表达任何含义时,它最终就意味着什么。 在本文中,我经过大量研究后,以迄今为止最精确的方式解释了我对软件体系结构的看法。

到底什么是软件架构?

> A library's architecture doesn't define how the books are going to be organized

 

作为软件制作者,我们将根据目前对编程以及应用程序业务领域的了解,尽力而为地编写代码。

随着时间的流逝,我们不仅学到了编程技术,而且学到了业务领域的特殊性和特征,而且学到了越来越多的东西。

趋势在变化,新的编程技术不断涌现,其中一些在市场上越来越受关注。 随着更多功能添加到软件中,业务领域也不断发展和变化。

因此,我们编写的代码似乎正在慢慢衰减,因为我们在编写时没有掌握新知识。 每次查看较旧的代码时,我们都会更加确信它不再反映出应该解决的最佳模型。

到底什么是软件架构?

> Code decaying over time

 

这是正常的。 它从项目开始就发生,并将一直持续到结束。 软件之所以软是因为它被更改了。 重构。 实验过已调整。 已更正。 递增。

但是更改此代码并非易事,因为在大多数情况下,系统很复杂。 变更的影响并不总是很明显。 我们害怕破坏某些东西而感到震惊。 这就是我们编写自动化测试的原因。 能够无所畏惧地更改软件。 为了能够重写,调整,试验,修复。

到底什么是软件架构?

> Automated tests to measure the impact of change

 

不仅要知道软件是否可以运行。 如果我们永远都不会改变该系统,那么经过良好的手动测试将非常擅长于确保一个版本能够正常工作。 也许比自动测试更好,因为手动测试是强制性的端到端,并且还可以捕获UX和业务领域中无法预料的问题。

事实证明,编写自动化测试不足以使我们的软件易于更改。 如果代码与实现细节(如UI,数据库以及与其他系统的通信)过于耦合,则代码中的任何更改都将受到这些外部因素强加给我们代码的固有建模的约束。

对业务规则建模方式的任何更改都将在多个自动化测试和实施详细信息中进行更改。 要改善业务规则中变量的名称,就是要使其在数据库,屏幕或其他位置也进行更改。 较大的变化,结构性变化会放松我们的脊柱。

到底什么是软件架构?

> When one change causes others

 

这就是创建架构的原因。 在对系统建模时,架构并不是要遵循的秘诀。 这不是术语。 这不是将业务规则组织到类或方法中的方法。 架构不是DDD [1]。

架构是将我们的代码与外部因素隔离开来的方法,因此我们可以自由地以我们目前认为最好的方式对问题的解决方案进行建模和重新建模。 然后重新进行建模。 然后再次。

当今最著名的架构之一是清洁建筑:

到底什么是软件架构?

 

在本文中,鲍勃叔叔似乎确实提供了秘诀,术语以及将业务规则组织到类和方法中的方法。 但是,如果仔细阅读,就会发现所有架构的目标都是实现所谓的独立性,即所谓的自由。

自由学习和改造系统而不会破坏一切。 自由清理代码。

这就是为什么有用例(交互器)的原因。 它们代表用户可以在系统中执行的操作。 它们是UI和应用程序之间的通信桥梁。 这就是为什么有Presenters的原因,当涉及到一些额外的处理来呈现信息时,Presenter会从应用程序返回到UI。 它们是外壳的一部分,它们可以不同地命名,也可以具有其他形式,只要它们能够发挥其隔离作用即可。

从那里开始,不应强加严格的规则。 这才是重点。 不受规定的约束。 我们已经编写了所有测试,所有用例和演示者都存在,因此我们拥有更大的自由度来定义实体的状态以及它们的行为方式。

到底什么是软件架构?

> Once the library's architecture is ready, we can organize the books as we please

 

因此,我们自己可以定义它们是否应该是函数,类,应该具有多少种方法。 如果它们将在网关(存储库)中实例化,则它们将在构造函数或方法中接收数据。 以及任何其他建模方式。

每个域都有其特殊性。 规则不适合,原则适合。 每个原理都将以给定的方式应用于每个领域。 一切都取决于。 但是要在这一点上前进,我们需要习惯于重新思考。 也许回去做几片kata或dojos。

忘记规则,忘记模式……解决问题的最简单方法是什么?

忘记屏幕,忘记数据库…解决教授提出的大学挑战的最简单算法是什么?

忘记用例,忘记体系结构…编写测试,查看失败,编写可能通过的最少代码,然后进行重构。

忘了上课,忘了界面…更具可读性的是什么? 对于刚开始在公司工作的新手来说,最容易理解的是什么?

忘记模式,忘记继承…我放置此代码的软件包是否一致? 使用此规则的任何人都容易找到它吗?

当然,我们将使用UI,数据库,用例和模式,类,接口和继承。 但是这些东西都是用来帮助我们为解决问题的最简单代码建模的工具。

域的每个部分都有不同的问题。 即使它们看起来都像相同的CRUD。 系统的一部分将需要一个在构造函数中具有数据的实体,另一部分将需要一个在网关内部生成的实体。 另一部分将需要其中包含许多规则的网关。 另一个将有一个仅由其他用例使用的用例,另一个将使它们全部内联。

但是问题更重要:此代码是目前最简单的代码吗? 就是这样,因为过一会我们会学到更多,并将此代码更改为更好的代码。

[1]《域驱动设计》一书探讨了一些概念,这些概念有助于将应用程序与外部因素隔离开来,但目标是以与业务领域一致的方式对业务规则进行建模-这确实非常重要,而另一个主题是 文章-并没有过多地关注独立性和自由性。

(本文翻译自Caio Andrade的文章《What Exactly Is Software Architecture?》,参考:https://medium.com/swlh/what-exactly-is-software-architecture-c1c67d1213f3)



Tags:软件架构   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
如何设计一个好的软件架构,如何提高软件的扩展性,移植性,复用性和可读性?很多做嵌入式开发的朋友经常会遇到这种情况:一个项目软件设计完成了,客户提出了一些新的功能需求。这时侯...【详细内容】
2021-11-08  Tags: 软件架构  点击:(35)  评论:(0)  加入收藏
一、架构软件架构(software architecture)是一系列相关的抽象模式,用于指导大型软件系统各个方面的设计。软件架构是一个系统的草图。软件体系结构是构建计算机软件实践的基础...【详细内容】
2021-08-31  Tags: 软件架构  点击:(78)  评论:(0)  加入收藏
1. 前言嵌入式是软件设计领域的一个分支,它自身的诸多特点决定了系统架构师的选择,同时它的一些问题又具有相当的通用性,可以推广到其他的领域。提起嵌入式软件设计,传统的印象...【详细内容】
2021-04-15  Tags: 软件架构  点击:(250)  评论:(0)  加入收藏
存在任何解决实际人类问题的业务。它可能是提高速度,降低成本,提高便利性,增加生活乐趣或使知识触手可及。通常用于解决这些业务问题的技术。但是,为什么设计模式很重要?IT系统的典型挑战是可用性,可伸缩性,弹性,数据管理,性能...【详细内容】
2021-01-14  Tags: 软件架构  点击:(176)  评论:(0)  加入收藏
今天谈下架构设计中的分层思维和分层模型以及基于分层思维下的架构构图逻辑。架构思维概述对于架构思维本身仍然是类似系统思维,结构化思维,编程思维等诸多思维模式的一个合...【详细内容】
2020-11-23  Tags: 软件架构  点击:(105)  评论:(0)  加入收藏
解耦的对立面是耦合,耦合是指阻碍变化的依赖;解耦是要在依赖的基础上,做到应对可能的变化。架构的定义架构是软件方法学的范畴,它解决的是软件组织的问题,不解决软件算法的问题。...【详细内容】
2020-11-23  Tags: 软件架构  点击:(132)  评论:(0)  加入收藏
编者语:微服务,就是将单体(monolithic)代码分解为易于维护的块,而这正是运维(devops)哲学的关键。或者说是基于不断扩展的业务而实现针对业务功能域的应用商业价值的快速交付或敏捷...【详细内容】
2020-10-30  Tags: 软件架构  点击:(101)  评论:(0)  加入收藏
架构模式是对给定上下文的软件架构中常见问题的一种通用的可复用的解决方案。一种模式就是特定上下文的问题的一种解决方案。然而,很多开发者至今还对各种软件架构模式之间的...【详细内容】
2020-10-30  Tags: 软件架构  点击:(96)  评论:(0)  加入收藏
SQLite是一个非常受欢迎的数据库,在数据库排行榜中已经进入前十的行列。这主要是因为该数据库非常小巧,而且可以支持Linux、Windows、iOS和Andriod的主流的操作系统。 SQLite...【详细内容】
2020-09-25  Tags: 软件架构  点击:(91)  评论:(0)  加入收藏
阿里达摩院的一位大佬曾经说过:要成为一名优秀的软件架构师,需要攻克以下三个难关: 需要掌握各种技术的优缺点与特性,才能知道如何使用。 站在架构设计者的角度,思考一款优秀的...【详细内容】
2020-09-02  Tags: 软件架构  点击:(103)  评论:(0)  加入收藏
▌简易百科推荐
为了构建高并发、高可用的系统架构,压测、容量预估必不可少,在发现系统瓶颈后,需要有针对性地扩容、优化。结合楼主的经验和知识,本文做一个简单的总结,欢迎探讨。1、QPS保障目标...【详细内容】
2021-12-27  大数据架构师    Tags:架构   点击:(3)  评论:(0)  加入收藏
前言 单片机开发中,我们往往首先接触裸机系统,然后到RTOS,那么它们的软件架构是什么?这是我们开发人员必须认真考虑的问题。在实际项目中,首先选择软件架构是非常重要的,接下来我...【详细内容】
2021-12-23  正点原子原子哥    Tags:架构   点击:(7)  评论:(0)  加入收藏
现有数据架构难以支撑现代化应用的实现。 随着云计算产业的快速崛起,带动着各行各业开始自己的基于云的业务创新和信息架构现代化,云计算的可靠性、灵活性、按需计费的高性价...【详细内容】
2021-12-22    CSDN  Tags:数据架构   点击:(10)  评论:(0)  加入收藏
▶ 企业级项目结构封装释义 如果你刚毕业,作为Java新手程序员进入一家企业,拿到代码之后,你有什么感觉呢?如果你没有听过多模块、分布式这类的概念,那么多半会傻眼。为什么一个项...【详细内容】
2021-12-20  蜗牛学苑    Tags:微服务   点击:(8)  评论:(0)  加入收藏
我是一名程序员关注我们吧,我们会多多分享技术和资源。进来的朋友,可以多了解下青锋的产品,已开源多个产品的架构版本。Thymeleaf版(开源)1、采用技术: springboot、layui、Thymel...【详细内容】
2021-12-14  青锋爱编程    Tags:后台架构   点击:(20)  评论:(0)  加入收藏
在了解连接池之前,我们需要对长、短链接建立初步认识。我们都知道,网络通信大部分都是基于TCP/IP协议,数据传输之前,双方通过“三次握手”建立连接,当数据传输完成之后,又通过“四次挥手”释放连接,以下是“三次握手”与“四...【详细内容】
2021-12-14  架构即人生    Tags:连接池   点击:(16)  评论:(0)  加入收藏
随着移动互联网技术的快速发展,在新业务、新领域、新场景的驱动下,基于传统大型机的服务部署方式,不仅难以适应快速增长的业务需求,而且持续耗费高昂的成本,从而使得各大生产厂商...【详细内容】
2021-12-08  架构驿站    Tags:分布式系统   点击:(23)  评论:(0)  加入收藏
本系列为 Netty 学习笔记,本篇介绍总结Java NIO 网络编程。Netty 作为一个异步的、事件驱动的网络应用程序框架,也是基于NIO的客户、服务器端的编程框架。其对 Java NIO 底层...【详细内容】
2021-12-07  大数据架构师    Tags:Netty   点击:(16)  评论:(0)  加入收藏
前面谈过很多关于数字化转型,云原生,微服务方面的文章。虽然自己一直做大集团的SOA集成平台咨询规划和建设项目,但是当前传统企业数字化转型,国产化和自主可控,云原生,微服务是不...【详细内容】
2021-12-06  人月聊IT    Tags:架构   点击:(23)  评论:(0)  加入收藏
微服务看似是完美的解决方案。从理论上来说,微服务提高了开发速度,而且还可以单独扩展应用的某个部分。但实际上,微服务带有一定的隐形成本。我认为,没有亲自动手构建微服务的经历,就无法真正了解其复杂性。...【详细内容】
2021-11-26  GreekDataGuy  CSDN  Tags:单体应用   点击:(35)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条