Java架构师功能设计和架构设计


1 架构设计理念

在这里插入图片描述

那对于软件的架构设计啊,它其实指的是对一个软件系统进行的架构定义文档编写维护和改进验证实现的一系列活动。大家看这个定义,我们到这边来解释一下,比如说架构设计。本质上它是一个过程。那么这个过程呢,会围绕着软件系统,因为是要做软件系统的架构设计嘛。围绕着软件系统去做一些什么事儿啊?大家看就咱们刚才说的,它有这么四类,围绕着这个软件系统去做。做什么呢?

1.1 架构定义

比如说你做架构设计,就是为了把这个架构形式给定义出来。

1.2 文档编写

比如说我们不是画几幅图就完了,我们还需要把我们的这个设计理念,设计的这个思想传达出去。
那我们需要配套呢去编写一些架构设计相关的文档。

1.3 维护和改进

是不是我们要做的这个架构设计并不是一下就做的那样完美,它实际上是在不断的变化的。
是比如说是这样的变化,我们要对这个架构进行维护和改进。

1.4 验证实现

那么我这个验证实实现呢是我们不能做ppt架构构呢画几幅图,然后告诉你,你架构形式是这样这样这样,那么大家就去做吧,这样是不行的。我们还需要去证明咱们这样做架构是合理的,是能够达成目标呢,是一个相对较优的设计。

1.5 总结

架构设计呢,它就是把这一系列的活动。组合起来大家一看它也是一个过程。
同时呢架构设计也是一系列的活动。其实就上面说的这一系列活动的组合。你把这些东西都组合起来,那么统称就是咱们所说的架构设计。那现在呢大家应该对这个概念就比较清楚了。
那我们再看架构设计的产物,就是一个系统的架构。那么所谓架构设计的产物其实就是结果嘛,刚才不是说架构设计是一个过程,是一系列活动的组合吗?那你做了一系列的活动,最终是要有一个成果的对吧?
那架构设计的这个结果也就是指的这个产物。这个东西指的就是架构这个结果或者是产物吧这样。
指的就是咱们的架构。那这个呢也是架构和架构设计的关系。架构是结果,架构设计是过程,这就是它们之间的关系。关于架构设计这个概念呢,咱们就先理解到这个地方。

2 深入理解和认识架构设计

架构设计是一门尚不够成熟的科学。架构设计是一门科学,这个啊应该说在业内已经形成共识了。
但是作为一门科学来讲的话,它一定要有自己比较完善的基础理论、基础方法,也会有一些实现的方法论。那么从这个角度来看,架构设计作为一门科学来说,它是很不成熟的。

目前架构设计的一些基础理论还不是很完善,方法论上更是百花齐放,大家呢都还处于一个探索的阶段,也就是说呢这门科学还不够成熟。如果从科学上来讲的话,架构设计呢它主要是关注这个架构设计过程当中的。像技术呢、流程呢、资源呢、方法呢等等的。

2.1 架构设计关注哪些东西

第一个是具体的实现技术,他是要关注的。然后实现的流程是什么?其实这就是咱们的软工项目管理方面的一些东西,然后是资源,还有呢实现的方法,就方法论上的一些东西,以及呢如何去完善并改进架构。因为架构并不是很完美,那么你需要不断的演进,那到底该怎么去做呢?
我们需要有一定的理论来做支撑,并且要有方法论来做指导改进。这个架构也就是说呢从科学上来讲啊,应该关注这样子的一些东西。

那么从目前来说呢,架构设计啊还不够成熟。那我们再看第二那个架构设计是一门艺术,它需要一定的创造力。那么刚才讲到啊架构设计这门科学还很不成熟,再加上技术开发领域啊变化非常的快新技术、新思想、新方法层出不穷。所以说我们每年都在不断的学习新东西,疲于奔命。但不管怎么样,我们总是会面对很多新兴的没有先例的系统。可能呢会应用到新的框架、新的技术、新的解决方案来实现这些系统。因此啊我们做这个架构设计的时候,是需要有一定的创造力的。

你总是需要有一定的创造能力。去解决新兴的一些问题。对于艺术细胞缺乏的同志们也不用太担心,架构设计还是有很多是可以有章可循的。绝大部分的架构设计是在已有的这个架构体系上去做一些微调,进行微创新。

并不是说咱们完全从零开始。当然呢这个架构设计要想做的非常的好,懂一些哲学,有一些基本的美学知识,有一定的艺术修养,其实还是很有帮助的。所以说大家在看一些大佬们的讲解的时候,他都会建议大家到一定层次啊,你去看一些哲学方面的书,看一些艺术方面的书,以提升自己的这个综合能力。

2.2 架构设计是一系列的活动不断演化和完善的过程

架构设计它不是一蹴而就的,通常咱们在做架构设计的时候啊,也是由粗到精。
那么刚开始可能只有一个粗略的架构设计,然后不断的迭代,不断的演化,逐步推进去完善和细化,直到最后呢把架构设计出来。

2.3 架构设计跨越软工的全流程

架构设计一定是跨越软工的全流程的。对于一些大型的或者说是重要的项目,很可能在立项期间架构师就要参与了。那有人会说,那个时候不是还在跟用户谈意向,还在进行商务沟通吗?
这个时候架构师就要参与吗?

是的,对于比较大型的项目,一开始在立项期间,那么架构师就会参与进去做一些粗略的架构规划。
那为什么要这么干呢?

2.3.1 软工的全流程的原因

1 要确认自身的技术能力能不能做得了这件事儿

你不要说最终整个公司完全hold不住这个项目,没有这个能力去做这些事情。
那这样子的项目你接回来准备怎么办呢?

2 按照我现在粗略的这个架构规划下成本会有多少。

那么在立项的时候就要综合考虑成本风险、投资收益。
所以说呢立立项的时候架构师就有可能去参与,那就更不用说后面的需求阶段设计阶段。那架架构师是肯定要参与的,这个呢我们就不多说。那么接着往后做做完了概要设计设计设计这个设计阶段做完了过后,那么就到了编码阶段。那有些人可能认为哎架构师是不用参与编码的,这个也是不对的。架构师需要参与编码阶段,只是说他参与的可能会少一些,那么主要的开发工作还是由开发人员去成。

3 架构师参与的主要是一些重点难点的地方,或者说是一些公共基础功能
那么由架构师来实现,也就是说相对困难的方式架构师来实现。
另外呢在这个编码阶段,架构师还有一个非常重要的任务,就是确保开发人员按照架构设计去实现,而不会做做不不乱做,这个也是非常重要的。
不管你设计的有多好,如果开发人员在实现的时候根本不照你的开发设计来,那你这个开发设计有什么意义呢?

那么为了保证开发人员能够按照架构设计去实现,一般来说啊有两个基本的方法。
第一的一个就是架构师要把这个架构设计的成果跟开发人员讲解清楚,并且不断的沟通。
把你自己设计的思想和理念,还有你的想法完整的准确的传达给开发人员。
那另外一个方面就是要不断的去检查,去做review,以确保啊架构设计在落地实践当中不会出现大的偏差。
那编码阶段之后会进入到测试部署运维等阶段。
那这些阶段架构师实际上也是要参与的,至少要做一些技术的咨询,或者说是技术的指导工作。
因为咱们在做架构设计里面,本来就包含像部署架构的一些设计,因此架构师也会参与到这些阶段,只是呢参与的会少一点。

总而言之吧,架构设计他需要关注所有利益相关者的要求啊,前面呢咱们也讲到这个了,而参与系统设计开发实现的所有的人员也都是系统的利益相关者。那么自然而然的架构设计就需要贯穿软宫的整个流程了,这个要强调一下,咱们到这边记一下。就是架构设计。他一定是。贯穿软工的整个流程。
只不过是参与的多和少的问题,而不会说某些阶段架构设计不参与。再往下看。

4 这一个架构设计需要不断的决策,不断进行折中平衡
对一个系统要关注的方方面面是非常的多,利益相关者也很多,大家关注点又各不相同。
这就意味着在做架构设计的时候,需要不断去做决策,在众多的这个关注点当中啊去寻求平衡。
所以说有人说啊做架构设计就是一种玩儿平衡的艺术

举个例来说吧,那么从技术上来讲,可能为了实现这个系统,a方案和b方案加起来,它的这个实现方式啊性能是最高的。
但是呢从成本上来看,用a方式加c方式可能是最省钱的。
你看性能和成本,这是两个不同的关注点。
那么这个时候呢就出现了冲突。

你要想高兴呢可能就要多花一些钱,但是你要想特别省钱呢,可能性能就没有那么好。
那这个时候是不是要来折中平衡,那有可能最后综合权衡过后,可用了一个b加c的方案。
就说它的性能可能不是最高的,但是呢还可以。然后它的成本呢也不是最低的,但是也还不错。
这反而成为了一个各方都能接受的方案,这就是一种平衡艺术。

当然了,这种需要考虑的平衡很多。
比如说像刚才已经提到的技术和成本的平衡,还有方案适用性年限的平衡。
就比方说咱们现在做的这个设计方案,到底是要满足他一年、两年、三年就够了,还是说要考虑到八年、十年。那么考虑的年限越长,你的方案肯定会做的越复杂,那么预留的这个变化也会越多,复杂度肯定是不一样的。类似的还有技术方案和当前开发人员技能的平衡。
就比如说我们在做架构设计的时候,然后开始选型啊,选了一堆当前最热门的、最新兴的技术,也显得咱们很高大上。那这样做出来的架构设计非常的炫。但是到了真正实现的时候,发现团队内的开发人员对于你所选的这个门技术基本上都不怎么会。
也就是说当前开发人员的技能储备。是不足以支撑你选择这些技术的那这个时候我们就要来考虑怎么来平衡这样的问题。类似的呢还非常的多,那这儿呢咱们就不去多说了。

5 架构设计是系统利益相关者的共识
那么刚才也讲到架构设计是一个过程,它需要在这个过程当中不断去考虑各个利益相关者的诉求,并且呢不断的进行折中平衡。因此架构设计的组件前面也说了,就是架构。
那么它自然就是各方利益相关者的共识了。因为它本身就是一个折中平衡过后的产物,那么这个折中平衡的结果就是各方取得的共识。

6 架构设计,承认经验的复用
要做出好的架构设计,经验是不可或缺的。不可能每次咱们都是从零开始来进行系统设计。
比如说以前做过类似的系统,或者说是学习到的一些好的架构模式、设计模式,一些现成的组件。或者是一些好的开源的框架等等的。那么这些都可以看成是可重用的资源。
那我们做架构设计的时候,需要不断去积累这样子的可以重用的资源,从而形成自己的工具箱。这样呢当我们在做一个系统的架构设计的时候,就有了很多备用的工具或者说是手段。
那么有了这些经验,还有资源的积累啊,就会使得我们做新系统的架构设计变得更加容易这实际上就是承认经验的复用好对架构设计的基本认识,咱们就先讲到这个地方。

3 功能设计概念

功能设计通常指的是针对架构设计过后,要具体设计的每一个部分所进行的设计。
那前面呢我们也讲到架构设计呢实际上是对系统一些粗略的概要的这样子的一个设计过程。
那么在架构设计的过程当中呢,我们已经把系统分成了很多很多个部分。
那大家看一下咱们前面这个什么是架构的这个图。
在这里插入图片描述
通常指的是:针对架构设计后要具体设计的每一个部分所进行的设计,包括设计这部分实现的整体结构、划分子模块、确定每个模块的实现算法、对外提供的接口等,从而形成的具体实现的设计方案

4 理解和认识功能设计和架构设计

4.1 功能设计与架构设计是互补的关系

也就是说功能设计和架构设计并不冲突,它们俩呢是一种互补的关系。它怎么个互补法呢?
架构设计它关注的是高层和整体。
我们前面也讲到我们做架构设计的时候,那我们实际上关注的是这个软件系统分成了多少个子系统,每个子系统分成多少个模块,每个模块分了多少个组件,每个组件里面会封装着哪些功能。

所以说呢我们说从设计角度来看,组件就是封装一系列功能的这么一个封装体。
那么架构设计它关注的就是这种比较高层的粗略的结构。
除了划分到这些组件啊,封装这一系列功能之外,那么它还会关注呢组件之间的一些关系,或者模块之间的一些关系。
这个咱们前面也讲到过,可以去调用啊,扩展啊等等的。
那这些呢是架构设计关注的内容,所以它关注的是高层和整体,而功能设计更关注实现和落地。
那么当我们做完架构设计啊,有了这么一些框框过后,那具体的功能怎么来实现呢?
比如说我现在知道这个软件系统分成了这么三大组件,那每个组件里面比方说有五个功能,那好了,我整个系统分成了这么十五大块。

可是具体的每一块该怎么去做呢?
比方说这个功能一到底该如何实现啊,这个功能该如何实现等等的。这些就是由这个功能设计在关注。所以说呢功能设计它更关注于啊具体的这个实现还有来落地。所以大家一看,架构设计关注的是整体框架,而功能设计关注的是实现和落地。那么两个一结合起来是不是就是一个完整的软件系统的设计呢?

4.2 只有架构设计的弊端

你就会发现这里面会很空。也就是说只知道这些大的块的划分,然后呢他们之间的一些相互关系。
那么没有其他细节的东西的话,这个东西到落地实现的时候,你就会发现还差一些东西。
那么这样去做架构设计,我们通常呢把它称之为ppt架构。

比如说看上去都对啊,我这个系统分成这么多块啊,每块都是这样子的一些功能设计,然后之间都是这样子的关系,好像你明白了,但实际上拿着这个架构设计一进行实际设计的时候,就会发现哎,落不下去。或者说是在实现的过程当中完全走偏了。然后实现过,后来结果不太好。
那就反过来说啊,你这设计的什么这个有问题等等的原因呢,就在于缺少了功能设计这一部分。
所以说咱们在谈对软件的这个设计的时候,一定是架构设计和功能设计合在一起的。
都要做,那么才是一个完整的设计。

从某种意义上讲,功能设计可以大到一个软件系统,小到某一个具体功能的设计。
这个咱们前面呢也提到过,因为从设计角度来看,软件系统和一个具体的功能设计,或者说软件系统和组件、和模块、和子系统啊,甚至到这某一个功能块,本质上是相同的,只不过是包含的功能的多少不一样。

如果说我们把这整个软件系统就看成里面就包了一个功能,就只有这一个。那么实际上你的功能设计理论上来讲是不是就是整个软件系统的设计,这就是大到一个系统。那么往小的呢,就跟这一样,里面分了很多很多块。我现在呢只关注这其中的一个功能块的设计。

所以说呢功能设计啊可以大到一个软件系统,小到某一个具体功能设计。
如果说大到一个软件系统的功能设计,那么就类似是软件设计,就是咱们整个软件系统的设计。
如果说我们把它小到某一个具体功能的设计,就可以看作是对一些重点难点功能进行的详细设计。
那这几个呢应该说比较好理解,我就不再去多说了。

由于啊这个具体的功能多种多样,因此呢咱们在进行好的功能设计的时候,它是需要较强的设计技巧和设计工艺的。
前面呢谈到如果说只是做ppt级别的架构,那么没有这个具体的功能设计的话,实际上整个设计是不完整的那落地呢是可能会出现问题的那为什么这些人不去做这个具体的功能设计呢?

很大一部分原因就在于真正要想把功能设计的话,它是需要有较强的设计技巧。
和设计的这个能力,也就是我们常说的从细节处见真功夫。
这些ppt级别的架构师可能包括一些概念空对空的来一些大的块的东西,大范围的东西没问题,他可能能讲清楚。实际上这个非常简单啊,多看一些书,听一些讲座,有一些基本的设计思路,然后能把它讲出来可以了。

4.3 功能设计遇到的问题

我这个系统分成八大块,每块大概是什么样的功能组合?
这些块与块之间大概是一个什么样的相互交互的关系?
那么怎么样形成一个完整的业务流,那这都很好说,这些都相对还是比较简单的,关键就在于落实到实处。
那我每一块到底该怎么实现才是更好的呢?
我这个关系到底该如何实现?
我这个业务流到底该如何实现呢?

那这个时候落实到具体的落地实现的时候,那就需要真功夫了。
所以说这里啊咱们特别强调功能设计对于整个软件设计的一个重要的意义。
那接着再看下一条,功能设计他认同好的设计经验,最佳实践,还有设计模式等的复用。

那前面也讲到啊,功能设计本身就是这个功能的具体落地的实现嘛。
而设计经验啊、最佳实践啊、设计模式这些东西基本上都是来源于实际的实践。
通过总结这个实践当中一些比较好的经验,把它总结出来、抽象出来、提炼出来,形成这些设计的经验,或者是最佳的实践啊,或者是这个设计模式。这些我们在设计的时候,当然是要尽量去借鉴,尽量去服用的。
因为他们已经被证实是能够很好的很合理的去解决咱们的这些具体的功能。所以说呢我们一定要去服用这些东西。

4.4 功能设计复用

由于功能多种多样,而每一种设计经验呢、最佳实践啊或者设计模式呢,它都是有一定适用场景的。也就是说我们现在的这个功能可能跟这个设计模式里面的这个功能场景并不完全契合。所以说呢咱们在服用这些经验的时候,咱们不能够完全的生搬硬套。

因为你场景不同,有可能搬过来过后啊,不但不能解决问题,反而带来更多的坏处,那这样就得不偿失了。

事实上我们在复用设计经验最佳实践设计模式等知识的时候,我们并不是去照搬他们的结构啊,就生搬硬套啊。这个最佳实践告诉我们应该做三点。

这个设计模式告诉我们应该有三个类,相互之间是什么关系,我也一点不落的搬过来。
不是这样子的,我们真正需要复用的是他们解决问题的思路,解决问题的方案。
比如说从思想层面上去复用。那这样的话就可以通过变形啊,让这个设计方案更加符合我们现在这个功能设计的需要,这才是真正合理的复用

5 架构师架构设计概念

在这里插入图片描述

咱们所说的这个架构设计,是前面所讲的架构设计和功能设计的一个完整组合。
那前面咱们也讲到,架构设计关注的是高层和整体的这个软件结构,而功能设计呢更加关注于实现。
和落地。如果我们只关注咱们前面讲的架构设计,那就变成ppt架构师了。也就是说你的设计到最终很难真正落地实现出来。

所以说呢我们所说的架构设计一定是既关注高层和整体,也要关注实现和落地的。
把他们有机的组合起来,就是我们所说的这个架构设计。那这里呢,咱们一定要统一认识。
在后面我们所说的这个架构设计指的就是贯穿软工全流程的,指的就是架构设计和功能设计的一个完整组合这些统称起来是我们的架构设计

所以说呢,我们是要做真正落地的架构设计,而不是ppt级别的架构。
咱们所说的架构设计呢,它主要部分啊是相当于传统软工的概要设计和详细设计这两个大的阶段。
那前面也跟大家说了,虽然说这两个阶段是它的主要部分,但并不是说其他部分他不参与。像需求阶段、编码阶段、测试阶段都是要参与的这一点大家一定要理解。那为了更好的跟传统的这个概要设计、详细设计这些概念呢做一个区分,我们我们所说的架构设计分成了三个大的阶段。
第一个大的阶段,我们把它称之为高层架构设计阶段。这个我们到这边来写一下。

5.1 高层架构设计阶段

这个阶段呢,当然就是咱们传统意义上的架构设计,更加关注于高层和整体。一般来说啊,跟业务的关系不会太大。具体业务。要小。另外呢这个阶段一定是相对比较粗略的概要的。
这么一个设计的阶段。

5.2 高层架构设计的细化阶段概要设计

又把它分成概要设计阶段和第三的一个叫详细设计阶段。拿到这儿来。就是高层设计阶段的细化。
那么细化呢,又分成两个部分,一个部分是概要设计。一个部分是详细设计。
这个呢是第三的一个。那我们先来解释这个,那么从这个阶段开始啊,咱们就要关注具体的实现和落地了。一般来说呢,在概要设计这个阶段,它跟具体的业务关系就会比较大了。也就是说在概要设计阶段,我们就要去考虑具体业务的实现。这儿呢咱们就直接写成。
相关。也就是说呢高层架构这一阶段你不考虑具体的业务。
但是到了这个细化的部分做概要设计的时候,那我们就要考虑具体的业务了。一般来说呢这个阶段它是对业务实现的。粗略的概要的设计。而上面这个呢是对整体系统。大家看一下这个层面啊是不一样的。那么你也可以这么理解,高层架构设计阶段实际上是来画整个软件系统的框框。整个系统的主体结构吧一起。那这是高层架构设计阶段,你看确定整个系统的主体结构。那这个概要设计阶段呢,实际上相当于它是对整个业务实现的一个主体结构。说还是不一样的。业务功能实现的这么一个主体结构。

5.3 高层架构设计的细化阶段详细设计

这个当然也是关注具体的实现和落地,它肯定是有相关的。这就不一般来说了啊,他一定是跟具体的业务相关。因为你要给出具体业务实现的方案嘛,那这个时候呢,他给出来的就是对业务实现的。详细的。可落地的。这个。可执行的。设计方案。也就是说这一步做完过后,那就真真照着这个去实现出来,那就把这些功能就搞定了。所以说呢他这儿啊确定的是业务功能的。具体实现方案。

所以说大家会发现咱们分成了三个层次,每一个层次呢都有自己要完成的任务。
所以看起来啊其实也是一种迭代的思想。刚开始上来呢,我先对整个系统的框框做一个设计,这是高层架构,等把这个框框设计好了之后,我就开始来细细化。细化的时候呢,首先也是去画框框,只不过是去化业务的关系。那这个业务到底整体的设计,那我就去把这个主体结构设计出来。
那么这个时候整个系统的结构已经有了,那我业务的具体系统的主体结构有了。
那下下来呢到了每每一个功能的具体实现,那就是细细化的详细设计。
这个阶段大家是不是逐步细化,那最终完成整体的设计。

5.4 更好的理解它们之间的关系

我们就用这一个设计这种房子,最终完成之后,就相当于咱们完成了一个软件系统。也就是说最终。
都成型的这栋大楼就是我们的软件系统。
那么高层架构设计阶段就相当于什么呢?
在这里插入图片描述

我们造一个房子的时候,我们首先要去搭它的柱子,要去搭建它的横梁,比如说要搭整栋大楼的框架结构。那好了,这个高层架构设计阶段就有点类似于我们去修建一座大楼的这个框架结构。
那么这个框架结构每一层这是不是都已经定好了,然后呢就要开始了细化了,我们就可能来规划哎这一层我们要分多少个房间,每个房间大概要多大。比如说这用作会议室,而且是大的会议室。好,我要给他多少平?

在这里插入图片描述

那这里呢可能只是一个小的办公间,那我大概给他一个什么样的规划?
那这个地方呢可能是个茶水间等等的,也就是把这每一层的这个空间做一个合理的规划。那这个过程。放到咱们软件里面来,就类似于咱们高层架构设计阶段细化的概要设计。比如说这个时候你看整体框架有了,那么每一层的这个房间布局啊以及功能也定好了,这就是概要设计了。

在这里插入图片描述

那接下来每一层的这个房间定好了过后,那我们就开始深入到每个房间的内部。根据这个房间的功能规划,开始来设计这个房间内部应该要怎么样去装修,应该要布置一些什么样办公用品或者是家具。
而这个类比到咱们软件系统里来,就是这里所说的高层架构设计阶段细化的详细设计。那这个现在有了,我们现在也规划好了。

那现在呢我就要来看这个功能我到底如何去实现了。
这么一说的话,那是不是就比较好理解,咱们为什么要分这么三层呢?
那么从这个设计上来讲,你把这些规划做好了过后。然后就请施工队来施工啊,把这个东西按照你的设计要求做出来,装修好就可以了。而咱们放到软件工程里面来大概也类似。
当我这个设计好了过后,那么我们就让开发人员加入进来,按照我们的设计要求,按照我们的这个业务功能的要求去实现出来。大体上是不是非常的类似。

猜你喜欢

转载自blog.csdn.net/ZGL_cyy/article/details/133552857