Java架构师角度看架构

news2024/11/18 19:42:15

目录

  • 1 导学
    • 1.1 技术提升依然突破不了职业的瓶颈
    • 1.2 技术提升可薪资依然涨不上去
    • 1.3 学了架构课程依然觉得自己成长很慢
  • 2 架构的基本认识
    • 2.1 什么是架构
    • 2.2 为什么要做架构设计
  • 3 深入理解和认识架构。
    • 3.1 架构定义的行为。
    • 3.2 架构关注系统的主要元素
    • 3.3 平衡关注点
    • 3.4 架构会受到环境的影响
    • 3.5 架构会影响开发团队的结构
  • 4 架构分类


1 导学

在这里插入图片描述

本章博客我们来学习java项目架构设计与落地应用的导学。为什么这偏文章对我很重要?首先呢我们来看一些常见的困惑。我们来学习路在何方,大家统一一个认识,选对方向,朝着同一个目标前进,不走错路,不走弯路,这就是最快速的路。先从架构师的角度来看待架构并深入理解。依次去学习和理解架构分类、架构设计、功能设计、架构师等等核心的概念,并深入去分析架构师的核心技能要求,也就是我们要学习的方向。
在这里插入图片描述

我们学习的目标是要快速成长为合格的架构师,那需要什么样的核心技能呢?

简单的说啊就是成长为合格的架构师需要学什么,咱们就学什么。需要掌握到什么样的程度,我们就学到什么样的深度。这样的话咱们就不会走错路,不会走弯路了。
在这里插入图片描述

另外呢在本章后半部分还会去学习大道至简,基本的设计思想都是架构设计非常重要的一些思想。
这里呢咱们只讲几个最核心的。

在这里插入图片描述

1 面向对象设计的核心思想,封装

咱们开始学习面向对象就讲封装继承多态,封装是面向对象设计最核心的思想之一。

2 一个面向对象设计的重要技巧隔离
我们为什么要去封装对象?
如何去封装组件、划分模块、划分子系统等等的。这些都体现了隔离的思想。
封装加隔离可以说是面向对象设计最重要的设计基础。

3 学习架构设计和开发的重要步骤,就是从大到小,由粗到精,逐步细化
这个也是咱们去学习一门新技术,掌握一门新技能的基本的学习方法和学习步骤。

4 架构设计和开发的核心方法,迭代
我们做任何事情都不是一蹴而就的,需要不断迭代,螺旋式前进,最终去完成咱们的目标。
这些思想对大家来说都是耳熟能详的,在这里呢会结合老师多年的经验和理解,再深入的去讲一下,希望大家能够好好去领悟。

1.1 技术提升依然突破不了职业的瓶颈

这是很多人的困惑。感觉自己各种技术学了一大堆,项目也做了不少,可就是突破不了职业的瓶颈。这个时候你要考虑是不是自己学习的方向不对。

如果你只是围绕开发去学一大堆的开发技术,那么我可以告诉你,你就会面临这样的问题,觉得技术上学了一大堆,可自己呢依然在原地打转。这个时候你需要向上走从开发往架构上走。

也就是你应该学的是架构设计,而不是单纯的围绕开发去学各种开发技术。本课程就是你学习架构设计,快速成长为架构师的最佳选择。

1.2 技术提升可薪资依然涨不上去

其实原因很简单,虽然你学了很多的开发技术,但是你还是只能承担一些开发的任务,不能勇挑重担去承担系统的架构设计、难点攻关、基础框架设计与落地。
但更有挑战性的工作不能够更进一步,自然也就很难升职加薪了。

1.3 学了架构课程依然觉得自己成长很慢

这也是很多人的困惑。感觉自己看了很多架构方面的书,也听过很多架构方面的课,但是在实际工作当中做的架构却无法落地,会感觉自己的成长特别的慢。
其实呢这是因为你缺少真正的架构设计方面的实战训练,浮于知识的表面。

2 架构的基本认识

2.1 什么是架构

说到架构,我们就会想到软件开发的另一个词:框架。

那么什么是架构,什么是框架,他们的区别又是什么呢?

其实,架构关注的是系统的结构,即系统的组成,需要明确系统有哪些子系统或模块组成。以及这些子系统是如何协作的、如何通信的等。如淘宝架构,微信架构。框架关注的点是一个可复用的基础功能的软件产品。如MVC框架、Spring框架等。

2.2 为什么要做架构设计

什么是架构
这里选取IEEE(电气和电子工程师协会)的定义
架构描述了一个系统的基本组织结构,包含了组成系统的组件组件之间的关系、组件与环境之间的关系,以及指导上述内容进行设计和演化的原则

系统:组织起来完成一系列功能的组件集

组件:组件是一个系统模块化的一部分,一系列功能集的封装体

从设计角度来看:本质是一样的组件<模块<子系统<系统

环境:环境或上下文,指的是会对这个系统的开发、运行等造成影响的环境和设置
在这里插入图片描述

3 深入理解和认识架构。

架构定义了系统结构,尤其是高层结构
架构呢就是结构,是谁的结构呢?就是软件系统的结构。
一般来说我们做架构的时候,不去关注这些具体的功能实现,而是把着眼点呢放在这个高层结构之上。

那可能有人就会在想呢,那啥是高层结构呢?
简单点说啊,就是比较粗略的、概要的轮廓性的这样的结构。那可能有人觉得说这个东西还是不太好想象。那我们打个比方,假如说我们现在这个软件系统就是一栋已经修建好的大楼。
那么这个高层结构呢,其实就是你修这个大楼的时候搭建的这些柱子横梁这样子的一个框框,把它类比到软件系统里面来,这就是软件系统的高层结构。

3.1 架构定义的行为。

这里所说的行为呢主要是指一些交互行为。
比如说组件之间的交互,组件和环境之间的交互等等。
那前面呢咱们也讲到了组件之间的交互也可能说是有调用关系,有依赖关系,有扩展等等的,这个呢就不多说了。

3.2 架构关注系统的主要元素

刚才提到我们做架构的时候,一般来说不去关注具体的功能,而是着眼于高层的结构。也就是说着眼点呢不会放的那么的细致。那么我们做架构的时候就会关注这个系统里面的一些主要元素。

那哪些算是系统里面的主要元素呢?
比如说你从用户角度来看,用户所关注的一些重点难点的功能,这肯定是主要元素,或者说在用户看来是有特色亮点的功能。
这个也算是主要元素。另外呢就是一些解决重要特性的元素。
比如说用户要求的影响到高性能、高可用或者安全性的这样子的一些元素。
通常也就是我们所说的质量属性。这些呢就是咱们做架构的时候应该要重点关注的主要元素。第四的一个架构要平衡系统利益相关者的需要。那这里首先呢咱们要知道啥叫系统利益相关者。
他指的呢就是对这个系统感兴趣,或者对这个系统有关系的人,团队或者组织。
那么这些呢都统统系统相关的这这里呢大家注意一点,系统利益相关者并不一定直接使用或者是操作这个系统的才叫利益相关者。他只要是对这个系统感兴趣,或者是对这个系统都可以称之为系统利益相关者。比如说客户方的老板,他可能不会直接去使用这个软件,但是他要付钱,他可能就会对这个系统提出一些要求。比如说他要求你的系统会怎么样,他要求你的这个可扩展性会怎么样。
所以说呢他也是一个系统利益相关者,而且呢他会提出他的要求,也就是有他的需要。当然就更不要说啊直接使用这个系统的这些人。比方说从客户方的角度来讲,参与业务使用的这些人当然肯定是利益相关者。从开发方来讲,所有参与这个系统的开发的这些人员通通都算是利益相关者。
从你前期的调研到底整个设计、开发、测试、运维以及整个项目管理的人员。那么所有的这些人围绕着这个系统通通都叫利益相关者。

那这样看起来的话,他会发现对于一个系统来说啊,利益相关者是非常非常的多。不同的利益相关者,他们的关注点通常是不一样的,甚至有些关注点是相互冲突的,甚至是矛盾的。比如说老板他要求说这个东西必须很省钱,然后使用的这边有些人可能说要求这个性能非常的好,但是呢系统管理部门又要求这个系统的安全性要非常非常的高。那大家一想就知道,安全性非常高就意味着你需要做的检测会非常的多,要求会非常的严格,这些对于系统的性能是有损耗的。所以说呢,不同的关注点很有可能是有矛盾的或者是冲突的。

3.3 平衡关注点

也就是要去平衡不同的这些系统利益相关者的需要。因为他们不同的需要就是不同的关注点。
架构呢是基于合理的证据来使得这个决策呀俱体化。

架构设计肯定不是拍脑门,不是架构师头脑一热说我们就要做成这样这样子的一个架构,而是基于一些合理的证据,当然这个证据可以是直接的,也可以是间接的证据,但是呢一定是合理的这样子的一些证据。

比如说你可以是同类产品的参考,别人已经做成功了,你看他们是什么样的一个架构形式,那我们是不是可以参照,因为人家已经做成功了嘛,这也算是合理的证据。
或者说是架构师架构团队以前设计的经验。或者说专门为了这个系统的架构去设计一些架构方面的demo来做的实际测试,来证明这样设计是可行的,从而使得这个决策是透明化的,具体化的。

3.4 架构会受到环境的影响

比如说架构会受到法律法规的一些要求。另外呢它还会受到一些行业标准的约束。
你做的行业不同,它可能行业会有一些呃行规,你做的这个架构也要受行业标准约束。
那么除了这些啊,咱们在实际的这个工作当中还经常碰到的一类就是咱们做的软件通常只是客户方复杂的软件需求里面的一部分,那么它可能已经有很多的软件系统在运行当中呢。
而我们现在要做的这个软件项目呢,需要去和已有的已经存在的这些软件项目相融合。
那么这个时候就有可能对咱们现有的软件系统架构形式、技术选型产生一定的影响。
另外呢,咱们做的这个系统还需要和已有的一些系统进行交互。
这些都是指咱们的架构会受到环境的影响。

3.5 架构会影响开发团队的结构

打个比方来说,那么现在啊咱们很流行微服的架构。假设说现在的这个系统的架构形式已经决定采用微服的架构。那么我们相应的开发团队就需要按照匹配微服务开发的这个方式来建设和组织。这就是一种典型的啊架构,会影响开发团队的结构

4 架构分类

众说纷纭的架构分类。事实上啊业内对于架构的分类也没有一个统一的标准。
我们也看到过听到过太多的关于架构分类的方式。
那总结起来了大概有这样一些,有按照实现层次来划分的,有按照关注方向去划分的,也有按照软工阶段来划分的,还有呢按照视图类型进行划分的,还有按照技术实现风格划分的等等很多种不同的架构分类的方式。虽然有这么多种分类方式,但是从本质上来讲,架构这件事儿并没有变化。
只是呢从不同的角度,不同的侧重点对这件事情呢进行了划分。因此啊有很多的划分实际上是会交叉重复的。接下来呢我们就一起来看一下,为了节约时间,我尽量啊少去解释这些架构的分类,大家有个印象就可以了。

相关文章
软件架构思想和系统架构图:https://blog.csdn.net/ZGL_cyy/article/details/126414922
互联网架构演进之路:https://blog.csdn.net/ZGL_cyy/article/details/126330968
中台架构介绍和应用价值:https://blog.csdn.net/ZGL_cyy/article/details/126317750
互联网架构演进方向:https://blog.csdn.net/ZGL_cyy/article/details/133040892

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1059717.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

站长如何能够做到网站的全方位防护呢?

随着互联网的急剧崛起&#xff0c;网站已成为企业塑造品牌形象和吸引潜在客户的首要渠道之一。然而&#xff0c;伴随着这种便捷性&#xff0c;网站安全问题也愈发凸显。DDOS&#xff08;分布式拒绝服务攻击&#xff09;和CC&#xff08;恶意请求攻击&#xff09;攻击成为了黑客…

ROS基础

E: Unable to locate package ros-kinetic-turtle-tf ROS Kinetic 学习笔记 (古月居) https://www.bilibili.com/video/BV1hc411n7N7/ 一、认识ROS 大纲 ROS的总体设计 系统实现 三个层次 1 主要是话题、服务通信模型的实现&#xff1b; 话题&#xff1a; RPC介绍&#…

顾樵 量子力学I 导读(1)

波函数与薛定谔方程 薛定谔方程的获得 经典电磁波理论与德布罗意关系 波函数的性质 波函数是平方可积函数&#xff08;归一化条件&#xff09;波函数和波函数的导数是连续的波函数的单值的波函数在势场奇点以外的地方连续力学量的平均值与期待值 粒子动量的期望值Ehrenfests th…

采用python中的opencv2的库来运用机器视觉移动物体

一. 此次我们来利用opencv2来进行机器视觉的学习 1. 首先我们先来进行一个小的案例的实现. 这次我们是将会进行一个小的矩形手势的移动. import cv2 from cvzone.HandTrackingModule import HandDetectorcap cv2.VideoCapture(0) # cap.set(3, 1280) # cap.set(4, 720) col…

1.1 数据库系统概述

思维导图&#xff1a; 前言&#xff1a; **数据库前言笔记&#xff1a;** 1. **数据库的价值** - 数据管理的高效工具 - 计算机科学的关键分支 2. **信息资源的重要性** - 现代企业或组织的生存和发展关键 - 建立有效的信息系统至关重要 3. **数据库的应用范围**…

Vue中如何进行移动端手势操作

当开发移动端应用程序时&#xff0c;手势操作是提高用户体验的关键部分之一。Vue.js是一个流行的JavaScript框架&#xff0c;它提供了一种简单而强大的方式来实现移动端手势操作。本文将介绍如何在Vue.js中进行移动端手势操作&#xff0c;包括基本手势&#xff0c;如点击、滑动…

闲聊四种旅游方式

十一长假&#xff0c;先不写那些需要深度思考的话题&#xff0c;先写点轻松的。 关于旅游方式&#xff0c;其实也是受梁斌博士一条微博的一些触动&#xff0c;他说他认识个朋友&#xff0c;自由职业&#xff0c;到处旅游&#xff0c;却从不旺季出行&#xff0c;非常省钱&#x…

关系型数据库设计理论及部署实现

ACID 索引实现方式 事务隔离级别 并发场景 写-写冲突 MVCC 数据库隐式字段 读视图 删表语句 insert与replace区别 Mysql相关参数 索引扫描方式 索引下推 复制日志 基于操作语句复制 基于预写日志(WAL)复制 基于行的逻辑日志复制 基于触发器的复制 主从同步 多主复制 Mysql备份 …

關聯式資料庫模型The relational data model

RELATIONAL MODEL關係模型 結構化查詢語言&#xff08;SQL&#xff09;基礎 foundation of structured query language (SQL) 許多資料庫設計方法的基礎foundation of many database design methodologies 資料庫研究基礎 foundation of database research 關係(Relation) …

Curve 文件存储的缓存策略

Curve 文件存储简介 Curve 文件存储的架构如下&#xff1a; 客户端 Posix 兼容&#xff1a;像本地文件系统一样使用&#xff0c;业务无缝接入&#xff0c;无侵入性&#xff1b; 独立的元数据集群&#xff1a;元数据分布式设计&#xff0c;可以无限扩展。同一文件系统可以在数…

Elasticsearch:什么时候应该考虑在 Elasticsearch 中添加协调节点?

仅协调节点&#xff08;coordinating only nodes&#xff09;充当智能负载均衡器。 仅协调节点的这种特殊角色通过减轻数据和主节点的协调责任&#xff0c;为广泛的集群提供了优势。 加入集群后&#xff0c;这些节点与任何其他节点类似&#xff0c;都会获取完整的集群状态&…

基于Java的医院挂号就诊系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作…

yolov5检测cs2中的目标

环境介绍 系统&#xff1a;Windows11 显卡&#xff1a;4070ti cuda:11.8 配置环境 python环境 安装python的虚拟环境anaconda。Free Download | Anaconda 成功安装后可以按Win键搜索anaconda&#xff0c;可以看到桌面版和命令行版本&#xff0c;我们这里直接用命令行版本…

VUE3照本宣科——响应式与生命周期钩子

VUE3照本宣科——响应式与生命周期钩子 前言一、响应式1.ref()2.reactive()3.computed()4.watch()5.代码演示 二、defineProps() 和 defineEmits()三、生命周期钩子1.onMounted()2.onUpdated()3.onUnmounted()4.onBeforeMount()5.onBeforeUpdate()6.onBeforeUnmount()7.onError…

公众号突破2个限制技巧

许多用户在注册公众号时可能会遇到“公众号显示主体已达上限”的问题。这是因为在2018年11月16日对公众号注册数量进行了调整&#xff0c;具体调整如下&#xff1a;1、个人主体注册公众号数量上限从2个调整为1个。2、企业主体注册公众号数量上限从5个调整为2个。这意味着&#…

vs2015 执行后出来空白界面的解决

为什么在visual studio上写的代码点击开始执行&#xff0c;出来的是空白界面&#xff1f;(代码没问题)? - 知乎 Visual Studio 2015 - 新建 C/C 项目 (Project)_vs2015创建一个c项目-CSDN博客

微信小程序点单左右联动的效果实现

微信小程序点单左右联动的效果实现 原理解析&#xff1a;   点击左边标签会跳到右边相应位置&#xff1a;点击改变rightCur值&#xff0c;转跳相应位置滑动右边&#xff0c;左边标签会跳到相应的位置&#xff1a;监听并且设置每个右边元素的top和bottom&#xff0c;再判断当…

Linux内存管理 | 一、内存管理的由来及思想

我的圈子&#xff1a; 高级工程师聚集地 我是董哥&#xff0c;高级嵌入式软件开发工程师&#xff0c;从事嵌入式Linux驱动开发和系统开发&#xff0c;曾就职于世界500强企业&#xff01; 创作理念&#xff1a;专注分享高质量嵌入式文章&#xff0c;让大家读有所得&#xff01; …