软件体系结构学习总结
基础信息:
1.设计模式和软件体系结构的区别:
2. mvn spring-boot:run可以让spring项目跑起来
3.CBD:基于构建构件的软件开发
构建开发例子:
springboot项目导入了模板引擎依赖和springsecurity依赖
1 | @Controller//注意这里是contreller注解,而不是@RestController;后者是基于RESFUL风格的请求; |
1 |
|
1 | spring.application.name = My First Web App |
反转控制和依赖注入:
控制反转IOC:
上面提供服务的是Controller组件,请求者是Web Server.
控制反转的概念:
(一个组件并不创造它所依赖的组件,而是由其他控件去创建。)
特别符合依赖倒置原则也就是构建不依赖具体的实现类,而是依赖于一个接口。
(反转控件就是由一个容器独立的定义一组构建以及他们之间的依赖关系,用这种方式实现把构建在运行时组合在一起,在构建生命周期的特殊时间段调用它)
实现反转控制可以通过依赖注入或者Service Locator来实现。
总结:
注解的理解:
Java注解入门到精通,这一篇就够了_java注解精通联系-CSDN博客
Java 注解 —— 注解的理解、注解的使用与自定义注解_java注解-CSDN博客
总结:
分层架构:
三层体系结构:
客户机服务器模式:
Fat Client:
基于servlet的BS架构:
Spring Boot进阶(85):配置Jetty容器|超级详细,建议收藏_springboot jetty-CSDN博客
spring-boot更好jetty服务器后用:mvn jetty:run启动项目
模型-视图-控制器:
MVC的概念:
上面的UI可以是模板引擎。
接受用户请求之后,业务不用在serve当中实现了,而是交给另外一个组件来实现这个组件就是Modle,Modle实现相关业务逻辑。Model可能是一个算法模型,或者是和数据库交互进行存储持久化操作等等。Modle执行业务逻辑得到的结果交还给Controller,Controller再交给UI进行渲染作为Respanse返回给用户。把原理单独的servlet拆分为3部分了,Modle,View,Controller.
Controller接收用户请求并解释用户请求交给Model来执行业务逻辑,得到的结果返回给控制器然后返回交给视图View,View将渲染后的结果当中响应返回给Client.
例子:
springmvc:
Dispatcher:调度,分配。
这里的Controller并不是把MVC中的M和C结合到一起了。Controller会调用相关Model中的方法。
测试Controller:@WebMvcTest();
测试类上添加@WebMvcTest注解,该注解的属性值就是要测试的类,如果该要测试的类需要注入Modle的时候,也技术依赖Modle类,测试中;在测试类中要注入@Autowired MockMvc组件模拟发送请求并断言。
单纯只添加了这个注解,如果测试的类也就是控制类的时候,如果
REST:
统一资源接口:
所有的东西在REST下都称作资源。
上面的URL中分号;代表同级关系,/代表层级关系。?后面是查询字符串,代表资源的过滤要满足的条件。
HTTP 与 HTTPS 的区别 | 菜鸟教程
HEAD方法跟GET方法相同,只不过服务器响应时不会返回消息体,只返回资源响应的头部信息。 一个HEAD请求的响应中,HTTP头中包含的元信息应该和一个GET请求的响应消息相同。 这种方法能够用来获取请求中隐含的元信息(元信息是描述数据或信息资源的数据),而不用传输实体自己。 也常常用来测试超连接的有效性、可用性和最近的修改。这里的资源指的是URL定义的一个资源。
get请求的安全是不管请求多少次都不会改变服务器的状态的,幂等是多次HTTP方法的幂等性是指一次和多次请求某一个资源应该具有同样的副作用,幂等性——是系统的接口对外一种承诺(而不是实现),承诺只要调用接口成功,外部多次调用对系统的影响是一致的。
一个幂等的操作典型如:把编号为5的记录的A字段设置为0,这种操作不管执行多少次都是幂等的。
一个非幂等的操作典型如:把编号为5的记录的A字段增加1,这种操作显然就不是幂等的。这里get幂等的意思是多次get都是获取同一资源,对服务器上的资源没有副作用。
理解http的幂等性 - yjge - 博客园
post url请求中url标识对该请求的处理并创建资源,这样多次post请求可能会生成多个资源实例,其多次请求对服务器产生了不一样的效果:生成了多个url资源;但是put请求中的url就是该表该要修改的资源,多次相同的put请求都是对同一个url产生效果。
就跟上面一样:put请求是用客户端的实例号创建资源,后面的相同的put请求就是在相同的url上进行修改。
总结:url代表的是服务器一个资源的标识符,一个资源可以有多个标识符;但是一个url只能指向一个资源。
url中的?后面跟的是参数,分号代表同级下的资源,/斜杠代表层级结构。
REST中的get,HEAD是安全且幂等的。安全是服务器中的资源在该请求下不会发送变化,幂等是同样的请求,多次都是针对同一个url,且对系统资源的影响是一样的就是幂等性。
get HEAD是安全幂等的,是他们的请求既不会对服务器的资源产生变化,且多次请求都是对同一个资源进行获取,对服务器是无影响的。
POST是不安全且不幂等的,因为post请求是创建资源或更新资源,都会资源发送变化(就算改变后的数据和改变前的数据是一样的,但是该数据的确是改变了的)。POST URL请求中的URL是服务端的请求对象,这里的URL并非操作资源的标识符,指定了URL请求对象可能在多次POST会产生不同的情况,也就是2次同样的POST请求可能操作的资源不是同一个,这样对服务器的影响是不一样的。
PUT请求是不安全但是幂等的。幂等的原因是PUT URL中的URL指向是具体的资源,多个相同的PUT请求都是对同一个URL进行操作。
REST的资源表征和状态转移:
比如数据库中的一条记录就是一个资源,它可以表示为JSON格式作为响应体响应出去,也可以作为相应的变量传递给模板引擎,后面的情况就是资源的表现层。
状态转移:
上面的点击进入下一个页面并成功进入到下一个页面了,就是客户端实现了状态转移。
SpringBoot HATEOAS用法简介 - smileNicky - 博客园
Spring ResponseEntity 详解:从原理到实践
可扩展架构:
传统的CS架构只有一个服务器,当请求数量特别多的时候,服务器压力特别大。
压力测试:
垂直扩展:
更新硬件或者更好服务器提到性能。
https://blog.csdn.net/qq_40298902/article/details/106543208
SpringCaching Redis:
@Repository 与 @Mapper的区别-CSDN博客
【精选】【Spring Boot】Spring Boot + H2 Database 示例_springboot h2 database创建表-CSDN博客
haproxy负载均衡_sorry#的博客-CSDN博客
SpringsessionJDBC:
管道过滤器结构:
JavaIO流大都情况下是这个模式。
pipe实现了在父子进程之间的通信。
通过中间形式实现不同语言的互通。
SpringBatch:进行大批批处理的框架
事件驱动架构:
Spring Event奇技淫巧 - 菜菜聊架构 - 博客园
Just a moment…
响应式架构:
响应式架构比springmvc吞吐率高,执行效率也高。
原因:REST风格的spring项目,当每个请求来的时候就会在tomcat服务器中的线程池中创建一个线程,而线程的创建和切换都会有额外的开销,但是当其中的一个用户请求创建的线程陷入到了阻塞,分配给该线程的cpu是浪费的;而响应式是将数据的请求当成一个流,当一个请求陷入了阻塞,线程就会切换到另外的地方处理其他失去而非等待。
复习:
软件体系结构期末复习
软件体系结构核心点复习
软件体系结构期末复习六十题_软件设计与体系结构期末考试题-CSDN博客
1.软件架构包括组件、连接件和约束三大要素。
- 组件:可以是一组代码,也可以是独立的程序。
- 连接件:可以是过程调用、管道和消息等,用于表示组件间的相互关系。
- 约束:组件连接时的条件。
“4+1”视图模型 - QI XIN - 博客园
软件体系结构期末复习
主义上面2种关于4+1不同的说法,但是实质是一样的,只不过使用的标准不一样。第一个是某个论文提出的,第二个是Rational Rose中提出的,但是他们的本质是不变的。
1.逻辑视图是描述系统的功能需求的,也即是系统提供给用户什么服务。通常包括类图、对象图、状态图和协作图
2.过程视图:描述系统中的进程,该视图通常包含活动图、顺序图等。
3.开发视图侧重于软件模块的组织和管理。也就是组织软件模块,库,子系统,开发单元。
- 描述系统的各部分如何被组织为模块和组件。
- 该视图通常包含包图和组件图。
- 管理系统体系结构中的层非常有用。
4.物理视图:将其他元素映射到处理和通信节点。描述如何将前三个视图中所述的系统设计实现为一组现实世界的实体,该视图通常包含部署图,展示了抽象部分如何映射到最终部署的系统中。
5.用例视图(场景视图):将其他视图映射到重要的用例(这些用例被称作场景)上对体系结构加以说明。场景视图就是描述现实中的一个系统运用场景的过程;
- 从外部世界的角度描述正在建模的系统的功能。
- 需要使用此视图来描述系统应该执行的操作。 所有其他视图都依靠用例视图(场景)来指导,这就是将模型称为4 + 1的原因。
- 该视图通常包含用例图,描述和概述图。
为什么事件驱动的特殊风格的架构存在数据交换的问题?
1 | 一个问题是事件驱动架构中的数据交换需要通过事件消息进行,这可能导致数据的复制和传递过程。 |
黑板知识库:
1 | 黑板知识库(Blackboard Knowledge Base)是一种软件架构中的组件,用于支持基于协同问题解决的系统。它的设计灵感来自于人类协同问题解决的模式,其中多个专家在一个黑板上共同解决复杂问题。 |
C2风格是什么?
1 | C2风格的设计灵感来自于人类协同工作的模式,例如团队合作、集体智慧和群体决策。它提供了一种机制和架构,使得分布在不同位置的多个计算节点能够相互通信、协同工作和协同决策。 |
剪切板应该是什么体系结构?
1 | 体系结构的角度来看,剪切板功能可以被认为是一个典型的发布-订阅(Publish-Subscribe)或观察者模式(Observer Pattern)。应用程序可以将数据发布到剪切板,并通知操作系统,表示数据可供其他应用程序订阅和使用。其他应用程序可以订阅剪切板,并在有新数据可用时接收通知,并获取数据以供其自身使用。 |
过程控制是属于控制流的体系结构。
D是拓扑的意思。
D选项,B/S体系结构是不利于事务的处理的。
C选项的移植困难是因为不同的操作系统兼容性不一样,维护困难和升级困难是因为客户端被安装到本地电脑上了需要逐个升级和维护。
(B选项可以这样理解spring中的控制层返回的是一个页面也就是view,他们并没有完全的解耦;C选项视图要通过控制器才能访问模型数据。模型(Model)是MVC架构中的组成部分之一,它代表应用程序的数据和业务逻辑。模型负责存储和管理数据,以及定义与数据相关的操作和规则。模型封装了数据的访问方法,并提供了对数据的增加、删除、修改和查询等操作。而spring中的模型我们常常用到它的存储和管理数据功能来动态修改模板引擎的数据。可以理解为springboot中的model将MVC中的V分割为了2部分,一部分是操作数据,一部分是存储和管理数据的)
XML:
Web服务的特点:
简单对象访问协议(SOAP)是一个基于XML, 在松散分布式环境中交换结构化信息的轻量级协议,它本身不定义任何应用
语言。
六、Web服务体系结构_wsdl定义了服务的接口、格式协议、实现三个层次的概念。每一层各包括哪些基本元素-CSDN博客
软件体系结构的描述方法有非标准图形符号,UML,ADL,,但是无法用XML来描述,其中非标准图形符号的优点是直观形象,简单易用。
软件体系结构的描述方法:
软件体系结构用UML描述的特点:
上面的ADL是软件体系结构的形式化描述。
服务发现是服务使用者的特性
XML本身不显示数据的样式,但是可以和其他技术(XSLT)结合来显示样式。
1 | XML本身并不关注数据的显示样式,它主要用于表示和组织数据的结构和内容,并提供一种通用的标记语言来描述数据。XML可以用于存储、传输和交换数据,但它并不提供直接的样式描述功能。 |
可以这样理解对象层就是类图中某个具体类的名称,特征层就是类的属性和方法;特征层描述的是类的特征(属性)和相关问题域的行为(方法),关系层就是类之间的关系,比如依赖,关联什么的。
C/S体系结构和文件共享体系结构一般处理的情况不一样,文件共享体系结构处理的是文件的上传和修改等业务操作;文件体系结构在客户端和服务端传输的是文件,而C/S体系结构传输的是响应和请求数据,文件共享体系结构中的文件数据在客户端和服务器之间进行实际的传输和共享。当用户需要访问或编辑文件时,文件被从服务器传输到客户端,用户对文件进行操作后,可能会将修改后的文件再次上传到服务器。因此,文件共享体系结构涉及大量的文件数据在客户端和服务器之间来回移动。客户/服务器结构返回给客户端的是处理后的结果数据,文件服务器结构返回给客户端的是包含客户所需数据的文件
C/S体系结构开发的软件在安装和部署的时候要考虑不同的操作系统,相比于B/S不那么容易安装和部署。
中间件:
中间件的定义:一种连接类软件,由一组服务构成,用来连接不同的软件构件或应用系统这些服务可以让运行在同一台或多台机器上的进程进行通信交互;在分布式计算环境中是一种处于操作系统和应用系统之间的软件层。
中间件的类型:RPC:远程过程调用,MOM:消息中间件;ORB:对象请求代理中间件;SQL;TP Monitor:事件处理监听器;
MVC遵循稳定依赖原则,其中稳定依赖原则是SDP;MVC稳定依赖的部分是模型,因为模型不依赖于控制器和视图。
MVC的被动模式:
SOA的优点:
- (1)灵活性,根据需求变化,重新编排服务。
- (2)对IT资产的复用。
- (3)使企业的信息化建设真正以业务为核心。业务人员根据需求编排服务,而不必考虑技术细节。
WSDL是SOA中Web服务的描述,WSDL文档也描述了Web服务的接口。
软件体系结构是什么?
软件体系结构来源于建筑学的体系结构,覆盖软件开发的全周期,主要聚焦于系统的总体结构以及需求和实现之间的对应;注重组件的可重用性和软件的健壮性,可维护性;软件体系结构=构件+连接件+拓扑结构+约束+质量,其中构件,连接件,约束是软件体系结构的三大要素;
1 | 软件重用是指在软件开发过程中,利用已有的软件组件、模块、库、框架或设计模式等,以提高开发效率、 |
批处理和管道过滤器的比较:
批处理是将多个任务按照一定的顺序排好自动执行的,而管道过滤器是逐步执行的,数据流经过一个过滤器后处理信息后传递该后一个过滤器;管道可以在Linux系统中实现父子进程的通信,而批处理不可以。管道过滤器可能会发生死锁,其也支持死锁检测;
1 | (1)合理地划分三层结构的功能,可以使系统的逻辑结构更加清晰,提高软件的可维护性和可扩充性。 |
软件体系结构的描述方法有:
1.非标准图形符号描述:特点是:语义丰富,但是不精确,直观形象,简单易用
2.UML:侧重于面向对象分析,语义丰富,且精确;可以根据UML图生成代码;
3.模块接口语言:MIL,语义比较丰富,精确,但是实现级别,层次较低;
4.体系结构描述语言ADL:在软件体系结构抽象级上提供了精确的定义,提供了强有力的分析能力,抽象和实现细节无观性,为体系结构元素定义了一系列的符号。语言准确无二义性;
1 | 开发关注的是组件的组合方式,也就是开发环境中的静态组织结构,其属于开发期的质量属性 |
开发视图通常使用构件图来描述。
Web服务所提供的接口、对Web服务的请求、Web服务的应答数据都是通过XML来描述的。