软件项目架构简单总结

软件架构

软件架构是什么?

软件架构是推理系统所需的一组结构。这些结构包括软件元素,它们之间的关系以及两者的属性。

其他定义

  • 软件架构包括有关软件系统组织的一组重要决策
  • 包含的决策
  • 包括选择组成系统的结构元素及其接口
  • 这些元素之间的协作中指定的行为
  • 将这些结构和行为元素组成更大的子系统
  • 以及指导该组织的体系结构风格
  • 还涉及功能、可用性、弹性、性能、重用、可理解性、经济和技术限制、权衡和美学等方面的考量。

目标

  • 架构是设计蓝图,是对结构和组件的描述,可以让大家快速理解整个体系,指导一系列的细节设计
  • 架构的本质,是利用分、合、打散、重组等技术手段,对系统进行有序化重构。

软件架构有什么好处

  • 更高的生产效率

    结构确定了,那就容易向已有的软件添加新特性,每一处新代码都能事先知道添加的位置

  • 更好的代码可维护性

    代码结构可见和已知,那就容易维护已有的软件,也更容易找到Bug和异常

  • 更高的适应性

    ​代码结构事先考虑到分层,那就容易完成诸如换一个前端,添加业务规则引擎等新特性。

  • 宣扬不可知论

    软件架构能使你根据你当前的结构看到行业里大肆宣扬和时髦的东西,去适应这些大肆宣扬和时髦的东西

常见的软件架构维度

业务架构

描述我们要做一些什么样的事情,对应的业务流程和模式是怎样的。

应用架构

描述我们提供哪些功能以及如何去实现这些功能,可拆分为产品架构和技术架构

技术架构

描述我们的技术实现方案,例如微服务间的关系,中间件的使用,组件的设计等。

数据架构

描述我们的数据逻辑模型,物理模型等。

常见的软件架构

Client/Server Architecture(客户端/服务器架构模式)

由两部分组成的软件架构模型,通过计算机网络(或在同一台计算机上)相互通讯的客户端系统和服务端系统。

Component-Based Architecture(基于组件的架构模式)
  • 基于组件的架构关注于设计的分解,即设计成单独的功能性或逻辑性组件来表示定义明确、包含方法、事件与属性的通信接口

  • 基于组件的架构的首要目标是确保组件的复用性

Layered Architecture(分层架构)
  • 分层架构专注于将应用程序中的相关功能组合到不同的层级中,层级间呈现出垂直层叠的结构

  • 每一层中的功能都通过共同的角色或职责来关联。层级间的通信是清晰的,而且是松耦合的。

  • 将你的应用程序分出层级来非常有有助于对关注点分离策略的支持,从而提高了灵活性和可维护性。

N-Tier/3-Tier Architecture (N层/3层架构)、
  • N层/3层架构描述是将功能大致像分层风格的架构那样分割成几段,而让每一段都成为可以放到一个物理上分离的计算机上的层。

  • 它们是通过面向组件的方式被发展而来的,一般通信是用的特定于平台的方法,而不是基于消息的方式。

Object-Oriented Architecture(面向对象的架构)
  • 面向对象的架构是一种基于责任分解的设计模式,即将系统分解为独立可复用的对象,每个对象包含了与自身相关的数据与行为

  • 面向对象设计将系统看作一系列相互协作的的对象,而不是一组程序或处理指令

  • 对象间互相分离、独立且耦合松散,它们通过接口调用或处理其他对象内的属性,并通过消息的发送与接收在接口上进行通信。

软件架构演变

单体结构

Web应用发展的早期,大部分Web工程师将所有的功能模块打包到一起并放在一个Web容器中运行,所有功能模块使用同一个数据库

垂直架构

将一个单体系统按业务垂直拆分为若干系统,系统之间通过网络交互来完成用户的业务处理,每个系统可分布式部署,这种架构统称为分布式架构

面向服务的架构

基于分布式架构,它将不同业务功能按服务进行拆分,并通过这些服务之间定义良好的接口和协议联系起来。

微服务架构

基于SOA架构的思想,对服务层进行细粒度的拆分,所拆分的每个服务只完成某个特定的业务功能,比如订单服务只实现订单相关的业务。

你可能感兴趣的:(Java学习,系统架构,架构)