西蒙布朗-C4模型
关于 C4 模型的一些解释
C4 模型是来自 software architecture for developers 一书的定义,指的是 Context 上下文场景、Container 容器、Component 组件和 Classes 类(或者 Code 代码),意思指一个软件架构是由这些模型呈树形结构组成。
关注代码仍然是大多数软件开发生命周期中关注的焦点,这是有一定道理,因为代码是最终交付。但如果你不得不向别人解释关于系统是如何工作的,你会从代码开始解释吗?
确实代码并不能讲述系统的整个故事,在缺乏文档的情况下,人们通常会开始在白板上或纸上用图框和线条解释系统的主要构建块是什么,它们是如何连接的。而使用 Microsoft Visio, Rational Software Architect 或 Sparx Enterprise Architect 等专业工具又比较复杂。
更好的办法是在不同的抽象层次创建不同的图 diagram,一个简单的图 diagram 比复杂的图能够更有效表达描述。下图是 C4 模型的示意图:
类 Class: 这是面向对象世界常用, 类是我们系统最小的构建模块。
组件 Component: 一个组件可以认为是由一个或多个类组成的逻辑组,比如一个审计 audit 组件或授权服务能够用于决定资源的访问是否被允许,组件典型地由许多协同类组成微服务架构可以认为是一种组件。
容器 Container: 一个容器代表组件执行或驻留的地方,这可能是一个 Web 容器或应用服务器,也可以是富客户端应用或数据库,容器是做为系统一部分启动的,容器之间通讯是通过远程接口如 SOAP web service, RESTful interface, Java RMI, Microsoft WCF, messaging, 等进行, Docker 可以认为是一个这样的容器。
Context/ 系统 System: 一个系统是一个高层次抽象和代表,一个系统由多个单独的容器组成,比如财务系统,银行系统或网站系统等。
西蒙布朗-C4模型的更多相关文章
- 软件架构系列一:C4模型
本文要点预览:因为软件系统的分布式特点以及开发团队的分布性,了解软件架构的基础变得越来越重要.而在过度设计和毫无设计之间,我们应该把注意力放在对软件系统有重大影响的决策和权衡上.好的架构师应该是团队的 ...
- 工程能力之C4模型
概述 刚在InfoQ上看到一篇介绍C4Model的文章,觉得这个模型设计的很赞,很有指导意义,做个简单的记录. Why,为什么需要架构图? ThoughtWorks中国 文章中有几句话我觉得很有道理, ...
- C4 模型 - 可视化架构设计
前言 世界上最难的两件事是: 1. 把我的思想放进你的脑袋 2. 把你的钱放进我的口袋 第二点我们不探讨,因为这是众所周知的,不信?过来试试:) 对于第一点,对我们程序员来说,其实也是我个人一直强调的 ...
- 京东云开发者|软件架构可视化及C4模型:架构设计不仅仅是UML
软件系统架构设计的目标不在于设计本身,而在于架构设计意图的传达.图形化有助于在团队间进行高效的信息同步,但不同的图形化方式需要语义一致性和效率间实现平衡.C4模型通过不同的抽象层级来表达系统的静态结构 ...
- 自定义PlantUML和C4 Model样式
什么是PlantUml PlantUml是一个支持快速绘制的开源项目.其定义了一套完整的语言用于实现UML关系图的描述.并基于强大的graphviz图形渲染库进行UML图的生成.绘制的UML图还可以导 ...
- 如何写好B端产品的技术方案?
B端产品为企业提供协同办公的工具,帮助企业解决某类经营管理问题,核心价值在于为企业增加收入.降本提效.管控风险,企业级SaaS产品也是B端产品中的一类. B端产品有以下特点: 客户是一个群体:B端产 ...
- 使用函数式语言实践DDD
长期以来我都在实践OOP,进而通过OOP来实现DDD,特别是如何通过面向对象的技巧来建立一个领域模型.OO的一些特性在建立领域模型时显得恰如其分,能否掌握OO的技巧,对创建领域模型有着至关重要的作用. ...
- 决策树模型 ID3/C4.5/CART算法比较
决策树模型在监督学习中非常常见,可用于分类(二分类.多分类)和回归.虽然将多棵弱决策树的Bagging.Random Forest.Boosting等tree ensembel 模型更为常见,但是“完 ...
- 决策树模型比较:C4.5,CART,CHAID,QUEST
(1)C4.5算法的特点为: 输入变量(自变量):为分类型变量或连续型变量. 输出变量(目标变量):为分类型变量. 连续变量处理:N等分离散化. 树分枝类型:多分枝. 分裂指标:信息增益比率gain ...
随机推荐
- java并发编程实战:第四章----对象的组合
一.设计线程安全的类 找出构造对象状态的所有变量(若变量为引用类型,还包括引用对象中的域) 约束状态变量的不变性条件 建立对象状态的并发访问管理策略(规定了如何维护线程安全性) 1.收集同步需求(找出 ...
- 注解Annotation补充介绍
摘抄http://www.cnblogs.com/peida/archive/2013/04/23/3036035.html 什么是注解(Annotation): Annotation(注解)就是Ja ...
- ASP.NET Core2读写InfluxDB时序数据库
在我们很多应用中会遇到有一种基于一系列时间的数据需要处理,通过时间的顺序可以将这些数据点连成线,再通过数据统计后可以做成多纬度的报表,也可通过机器学习来实现数据的预测告警.而时序数据库就是用于存放管理 ...
- vue实现首页导航切换不同路由的方式(二)【使用vuex实现的】
<nav> <!-- 导航栏 --> <div class="indexNavOut"> <div class="indexNa ...
- [mvc]记一次“项目”的历程
大二上半学期因为选修课的原因,答应帮老师完善学院的选课系统.在这之前没有做过一个可以成为“项目”的项目,本着挑战自己的原则和可以不上选修课的福利,断断续续用了一学期的时间来完善这个选课系统. 接受这个 ...
- JPA_映射双向多对多的关联关系(转)
双向多对多的关联关系 转自(http://www.cnblogs.com/lj95801/p/5011537.html) 双向多对多的关联关系(抽象成A-B)具体体现:A中有B的集合的引用,同时B中也 ...
- CSS链接的样式a:link,a:visited,a:hover,a:active
a :link(未被访问)a:hover(鼠标悬停)a:visited(访问过:真正到达那个页面)a:active(鼠标点击与释放之间.对无href属性的a对象无作用) 这几个元素,定义CSS时候的顺 ...
- OpenStack环境中的NFV实践
原文链接:http://www.99cloud.net/html/2016/jiuzhouyuanchuang_1103/250.html 在开始实践之前我们首先需要了解一些NFV概念和术语. NFV ...
- linux 使用内存作为 /tmp 临时文件夹
方法一:cat /etc/fstabtmpfs /tmp tmpfs defaults,noatime,mode=1777 0 0 方法二:mount tmpfs /tmp -t tmpfs -o s ...
- django系列3.3--view视图函数, render, reverse(未完待续)
1.view视图函数 urls分发之后所用到的处理函数 2.render 用于渲染页面 在views.py中常用 from django.shortcuts import render, HttpRe ...