《架构漫谈》阅读笔记

  架构漫谈是由资深架构师王概凯执笔的系列专栏,通过对其阅读,我从中逐步认识到了什么是架构,怎样做好架构,软件架构如何落地等内容。

  一、什么是架构

  在软件行业,对于什么是架构一直有很多的争论。事实上,架构在软件发明时的N多年以前,就已经存在了,这个词最早出现在建筑上。架构产生的五个动力可以概括为:由个人执行的工作;每个人的能力有限;每个人时间有限;人对目标系统有更高的要求;目标系统的复杂性使得单个人完成这个系统。当这五个条件同时成立,一定会产生架构。从这个角度上来说,架构是人类发展过程中,由懵懵懂懂的,被动的去认识这个世界,变成主动的去认识,并以跟高的效率去改造这个世界的方法。

  对于什么是架构,作者为我总结为四点:1.根据解决的问题,对目标系统的边界进行界定。2.并对目标系统按某个原则进行切分。切分的原则,要便于不同的角色,对切分出来的部分,并行或串行开展工作,一般共行才能减少时间,3.并对这些切分出来的部分,设立沟通机制。4.根据3,使得这些部分之间能够进行有机的联系,合并组装成为一个整体,完成目标系统的所有工作。

  二、认识架构的基础概念

  每个概念年实际上所解决的是人遇到的某个特定问题,我们把解决问题的解决方案,给定一个名字,这个名字就是对应的某个特定的概念。在讨论桌子这个概念的过程中,很多人会提出抽象这个概念。抽象这个词代表的含义,实际上是吧不同的概念的相似的部分合并在一起,形成一个新的概念。根据架构的定义,要做好架构所首先必须具备的能力,就是能够正确的认识概念,能够发现概念背后所代表的问题,进而才能够认识目标领域所需要解决的问题,这样能够为做好架构打好基础。 

  三、如何做好机构的识别问题

  找出问题的主题,是架构的首要问题。我们要解决的问题,一定是人的问题。架构师要解决的,基本上都是别人的问题,不是自己的问题,任何找上架构师的问题,绝对都不是真正的问题。

  我们需要识别:用户究竟是二传手,还是问题的真正主体。当然明白了问题的主体,我们才能真正的认识问题是什么。因为问题的主体是问题的隐含边界,边界不确定下来,问题就是不确定的。一旦确定了主体,剩下的就是去搞明白主体有哪些问题。

  做好架构首先需要做的就是识别出需要解决的问题。一般来说,如果把真正的问题找到,那么问题就已经解决了80%了。这个能力基本上就决定了架构师的水平。任何找上架构师的问题,绝对都不是真正的问题。需要从问题暴露的点,一点点去溯源查找,一定会找出来谁的问题,以及是什么问题。 

要正确的认识问题,需要问两个问题:

  1. 这是谁的问题?
  2. 有什么问题?

能够清晰的定义问题,是解决问题的第一步。

  四、如何做好架构的架构切分

  架构的切分的导火索是人、时间的负载太重。每个人的能力有限,或者单个人来做的话,时间太长。架构的切分实际就是对stakeholder的利益进行切分或合并,使得每个stakeholder的权责是对等的,每个stakeholder可以为自己的利益负责。

  架构切分的最终结果都会体现在组织架构上,只有这样才能够让架构落地并推进。

  架构切分的结果一定是一个树状,这也是为什么会产生分层。层数越多沟通越多,效率越低,分层要越少越好。尽可能变成一颗平衡树,才能让整个系统的效率最大化。

由此产出的一些设计算是软件架构:

  1. 软件因为流量增大而分拆成不同的运行单元,在不同的机器上部署所形成的架构,属于软件架构。
  2. 每个运行单元为了让不同角色的人,比如前端,业务,数据存储等能够并行工作,所分成的代码架构,也属于软件架构。

  五、自己的想法

  作者把架构归结为分工的需要,但是只有一个人的项目的时候,也是需要架构的。架构使整个系统满足业务需求的基础上,简单、可维护。总之,在以后的工作中,架构无论对个人还是团体都有着不可估量的作用。

原文地址:https://www.cnblogs.com/xulei11-/p/8523384.html

时间: 2024-08-24 11:19:25

《架构漫谈》阅读笔记的相关文章

《The C Programing Language》阅读笔记

<The C Programing Language> 要理解一种程序语言,而不仅仅只是会使用它. -----我的心声 介绍部分: 作者 C语言设计者 Kernighan  Ritchie  标准C语言及其程序设计方法 应用级编程两个主流语言 C++  Java 都建立于C的语法和基本结构上 现在世界上许多软件都是C语言及其衍生的各种语言的基础上开发出来的. C在传播中,肯定会有变化和进展,88年 ANSI(美国国家标准协会) 为C语言指定了一个精确的标准.即ANSI C. 自C诞生之后,C悄

CI框架源码阅读笔记4 引导文件CodeIgniter.php

到了这里,终于进入CI框架的核心了.既然是"引导"文件,那么就是对用户的请求.参数等做相应的导向,让用户请求和数据流按照正确的线路各就各位.例如,用户的请求url: http://you.host.com/usr/reg 经过引导文件,实际上会交给Application中的UsrController控制器的reg方法去处理. 这之中,CodeIgniter.php做了哪些工作?我们一步步来看. 1.    导入预定义常量.框架环境初始化 之前的一篇博客(CI框架源码阅读笔记2 一切的入

javascript高级程序设计阅读笔记(一)

javascript高级程序设计阅读笔记(一) 工作之余开发些web应用作为兴趣,在交互方面需要掌握javascript和css.HTML5等技术,因此读书笔记是必要的. javascript简介 JavaScript一种直译式脚本语言,是一种动态类型.弱类型.基于原型的语言,内置支持类型.它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在HTML(标准通用标记语言下的一个应用)网页上使用,用来给HTML网页增加动态功能. 文档对象模型 DOM doc

论文《Chinese Poetry Generation with Recurrent Neural Network》阅读笔记

这篇文章是论文'Chinese Poetry Generation with Recurrent Neural Network'的阅读笔记,这篇论文2014年发表在EMNLP. ABSTRACT 这篇论文提出了一个基于RNN的中国古诗生成模型. PROPOSED METHOD 第一句的生成 第一句的生成是规则式的. 先自定义几个keywords,然后通过<诗学含英>(这是清朝人编写的)扩展出更多的相关短语.然后生成所有满足格式约束(主要是音调方面的)的句子,接下来用一个语言模型排个序,找到最好

《构建之法阅读笔记02》

这次主要对<构建之法>的第四章“两人合作”作一次阅读笔记. 首先是代码规范问题. 我过去对于代码规范问题并没有做到注意.在编程中,许多变量和函数的命名都非常的简单而没有实际的意义.而且编程时不注意对齐缩进.很多时候也不加注释,导致对这些简单的变量名称不熟悉. 这样做会使得很多人读代码费劲,甚至是自己都要花时间再次阅读懂自己的代码.而且很多没必要的注释也会使得注释失去意义.当自己再次在原基础上编程时,可能要重新编程等问题. 因此,通过阅读“代码规范”,我找到一些解决方法.代码的风格要简明.易读.

《代码阅读方法与实践》阅读笔记之二

时间过得真快,一转眼,10天就过去了,感觉上次写阅读笔记的场景仿佛还历历在目.<代码阅读方法与实践>这本书真的很难写笔记,本来我看这本书的名字还以为书里大概写的都是些代码阅读的简易方法,心想着这就好写笔记了,没想到竟然好多都是我们之前学过的东西,这倒让我有点无从下手了.大概像我们这些还没有太多经历的大学生,总是习惯于尽量避免自己的工作量,总是试图找到一些完成事情的捷径吧.总之,尽管我不想承认,但我自己心里很清楚,我就是这种人.下面开始言归正传,说说接下来的几章内容归纳. 这本书在前面已经分析了

《大道至简》阅读笔记1

<大道至简>阅读笔记1 不知不觉间看完了第一章,从这个章节里我看到了一些我们都明白可是却自己很难做到的道理. 书中从愚公移山的故事和编程相结合给出了编程的精义就是顺序.分支.循环,这些都是我们所熟悉的,也是老师在教学中耳提面命的,可是我们又有几个人能做到呢. 我们总是在找着各种各样的学不好学不会理由,“它太难了”,“我太笨了”,认真的想一想难道真的是它太难了或者是自己太笨了么?不,答案是否定的,追根究底是懒惰,是没能坚持.从根本上来说,不存在会不会写程序的问题,除了先天智障和后天懒惰者,这要你

CI框架源码阅读笔记3 全局函数Common.php

从本篇开始,将深入CI框架的内部,一步步去探索这个框架的实现.结构和设计. Common.php文件定义了一系列的全局函数(一般来说,全局函数具有最高的加载优先权,因此大多数的框架中BootStrap引导文件都会最先引入全局函数,以便于之后的处理工作). 打开Common.php中,第一行代码就非常诡异: if ( ! defined('BASEPATH')) exit('No direct script access allowed'); 上一篇(CI框架源码阅读笔记2 一切的入口 index

构建之法阅读笔记05

2017.5.20 今天阅读的是<构建之法>第8章需求分析的阅读笔记,我们如果要开始做一个软件,最先要进行的就是需求分析,我们应该充分的了解我们这个软件是否具有前景,我们为用户提供的服务是不是用户所需要的,这一章详细的叙述了如何进行需求分析. 首先是获取和引导需求,我们应该找到软件的利益相关者,了解挖掘他们对软件的需求,引导他们表达出真实的需求.然后分析和定义需求,对各个方面的需求进行规整,定义需求内涵,从各个角度将需求量化,然后估计实现这些需求所需要的时间和资源,确定各个需求的优先级.紧接着

《构建之法》阅读笔记(2)

<构件之法>阅读笔记2 看了前面两章,我感觉我现阶段距离一个程序员还很远,软件工程师更是遥不可及.在学校的我学习了很多,如c++,数据结构,面向对象--学的多而不精,纵观现在我就是一个盲目学习的学生,上课时认真听了课后却没有花更多的时间去研究,遇到不懂的容易掉价死胡同,总是花很多时间闷闷思考,不到最后都没有去请教同学,去百度.看着其他很厉害的同学,自己就只能在一旁羡慕嫉妒恨.那现在在怎么样才能将自己对编程的兴趣提高,加强自己的编程思想?提高自己的价值?能够尽早地迈进程序员.软件工程师的行列之中