C4BUILDER—用于构建C4模型图的Web项目

2023-09-22 07:03:16

c4builder是什么?

c4builder: 字面理解是产生C4架构图的构建器。

  • c4builder是一个轻量级的nodejscli工具,用于仅使用文本构建、维护和共享软件体系结构项目。

  • c4builder是一种架构设计工具,可以帮助开发人员和架构师描述和可视化软件系统的架构,包括系统的组件、关系、依赖和交互。它基于C4模型(Context、Container、Component和Code)和DSL(Domain-specific language)的概念,使得设计者可以创建清晰、可维护、易于理解的架构图,并支持自动生成代码,提高系统的可靠性、可维护性和协作性。
    c4builder的主要思想是:开发人员可以使用熟悉的工具来定义软件。

与git相结合,这些文档中定义的体系结构的任何更改都很容易跟踪。Pull请求、分支、cherry picks和所有git特性都可以作为一种更容易的方式来跟踪项目体系结构的变化。

到这估计还是有点晕, c4builder 到底是什么呢?
c4builder 是基于NodeJS 一个扩展功能模块, 安装完成之后,提供了一些命令行, 使用命令行可以快速的创建一个可以用来编写C4模型图的Web项目框架, 该项目启动之后的效果如下图:
在这里插入图片描述

有了这个之后:开发人员, 项目管理,用户以及厂商等就可以很容易的在线查看这些系统相关的架构图了。

c4builder 的依赖项目

c4builder依赖于下面项目:

  • PlantUml :通过纯文本创建图表。https://plantuml.com/zh/

  • Markdown :从普通文本创建富文本文档。https://docs.github.com/en/get-started/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax

  • C4Model : C4模型, https://c4model.com/

  • C4 PlantUML: 生成PlantUML图的C4语法支持 https://github.com/plantuml-stdlib/C4-PlantUML

  • Docsify : 基于markdown文件创建一个单网页站点。 https://docsify.js.org/

  • vscode-plantuml : 用于visualstudio代码的vscode-plantuml插件,用于在设计时查看图表, https://github.com/qjebbs/vscode-plantuml

建议先熟悉上面内容

创建 c4项目

  1. 安装c4builder
npm i -g c4builder
  • 这里是全局安装c4builder 的扩展。
    安装的画面如下:
    在这里插入图片描述
  1. 创建项目: c4builder new

这一步会要求一些输入, 比如项目名等等, 可以一直点击回车就可以, 这里的项目名是 c4project

E:\workspace\nodejs\c4builder>c4builder new
       _  _   _           _ _     _
   ___| || | | |__  _   _(_) | __| | ___ _ __
  / __| || |_| '_ \| | | | | |/ _` |/ _ \ '__|
 | (__|__   _| |_) | |_| | | | (_| |  __/ |
  \___|  |_| |_.__/ \__,_|_|_|\__,_|\___|_|

Blow up your software documentation writing skills

This will create a new folder with the name of the project
? Project Name c4project
? PlantUML version: latest (compatible with plantuml online server)
? Include the VSCode autocomplete? Yes
true
  1. 命名行切换到项目目录: cd c4project

  2. 项目配置: c4builder

这里同样需要一些交互输入,可以默认一直回车。

E:\workspace\nodejs\c4builder\c4project>c4builder
       _  _   _           _ _     _
   ___| || | | |__  _   _(_) | __| | ___ _ __
  / __| || |_| '_ \| | | | | |/ _` |/ _ \ '__|
 | (__|__   _| |_) | |_| | | | (_| |  __/ |
  \___|  |_| |_.__/ \__,_|_|_|\__,_|\___|_|

Blow up your software documentation writing skills

if you created the project using the 'c4model new' command you can just press enter and go with the default options to get a basic idea of how it works.

you can always change the configuration by running > c4builder config

? HomePage Name MyHome
? Root documentation folder src
? Destination folder docs
? Compilation format: Generate multiple pdf files, Generate a single complete pdf file, Generate website
? Change the default docsify theme? //unpkg.com/docsify/lib/themes/vue.css
? Support search on navbar? true
? Include a repository url?
? Path to a specific Docsify template?
? Change the default serve port? 3000
? Add a custom css for the pdf (filename)? xx\node_modules\c4builder\pdf.css
? Compilation format: Include breadcrumbs, Place diagrams before text
? PlantUML Server URL https://www.plantuml.com/plantuml
? Diagram Image Format svg
? Change the default charset UTF-8

building documentation in ./docs
parsed 7 folders
generating docsify site
generating complete pdf file

这个命令会在项目目录下创建docs , src 等目录或文件。

  1. 启动项目 ,可以使用c4builder site ,也可以使用docsify启动。
    c4builder site 或者
docsify serve docs

在浏览器输入: http://localhost:3000/#/ 查看效果。

c4builder

的命令参数

可以通过 c4builder --help 查看命名参数。

  • -V 或者--version , 版本号
  • new : 根据模板创建项目
  • config : 更改当前目录的配置
  • list: 列出当前的配置
  • reset: 清除所有配置
  • site: 为生成的站点提供服务, 也就是启动服务
  • -w 或者 --watch: 关注变更和重构
  • docs: 配置选项的简要说明
  • -p 端口, --port 端口 : 服务的端口
  • -h 或者--help : 帮助

默认情况下,运行c4builder将尝试构建项目
如果没有设置配置,它会要求它,然后进行实际的构建。配置后仅运行c4builder将不再显示向导。
要在第一次构建后更改配置,只需运行c4builder-config即可。默认值将是之前设置的配置,因此您可以编辑感兴趣的选项。

项目结构

产生的项目包含两个主要的目录: 源代码目录(src)和目标目录(docs)。
遵循C4模型,src目录表示Systems/Containers/Components或任何其他类型的有关软件的信息。

目录结构如下:

│   .gitignore
│   README.MD
├───docs # 目标目录
└───src # 源目录
    │   context.md
    │   context.puml
    └───Internet Banking System
        │   system.puml
        │   system.md
        ├───API Application
        │       container.puml
        │       container.md
        └───Single Page Application
            │   container.puml
            │   container.md
            └───Additional Information
                    additionalDetails.md
                    class.puml
                    sequence.puml
                    class.1.md

目标文件夹由生成过程自动生成,可以有各种格式。该文件夹可以以不同的方式提供系统/容器/组件的深入式视图。要么将其作为一个站点推送到gitpages,直接在存储库中用作可导航的标记,要么生成pdf并使用传统邮件。

在线示例

安装问题: Failed to set up Chrome r116.0.5845.96! Set "PUPPETEER_SKIP_DO

完整的错误信息

npm ERR! command C:\windows\system32\cmd.exe /d /s /c node install.js
npm ERR! ERROR: Failed to set up Chrome r116.0.5845.96! Set "PUPPETEER_SKIP_DOWNLOAD" env variable to skip download.
npm ERR! Error: write EPROTO 206C0000:error:0A000152:SSL routines:final_renegotiate:unsafe legacy renegotiation disabled:c:\ws\deps\openssl\openssl\ssl\statem\extensions.c:922:



解决方法:

set PUPPETEER_SKIP_DOWNLOAD=true


完整解析:





此错误信息表明尝试下载 Chrome (用于 Puppeteer,一个 Node.js 的无头浏览器库) 失败,可能是由于 SSL 认证问题所导致的。

几种可能的解决方案如下:

1. 通过环境变量设置来跳过 Puppeteer 的下载步骤。你可以在安装之前设置`PUPPETEER_SKIP_CHROMIUM_DOWNLOAD`,使得 Puppeteer 安装过程中跳过 Chromium 的下载。但是这种方式需要你手动指定或者已经安装好可以使用的 Chromium 浏览器。

```bash
# Windows
set PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true
npm install puppeteer

# Linux/macOS
PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true npm install puppeteer
  1. 如果是在公司或者学校网络下,可能会需要一个代理来进行外网访问。可以通过环境变量设置来配置代理:
# Windows
set HTTP_PROXY=http://your-proxy.com:8080
set HTTPS_PROXY=http://your-proxy.com:8080

# Linux/macOS
export HTTP_PROXY=http://your-proxy.com:8080
export HTTPS_PROXY=http://your-proxy.com:8080
  1. 升级Node.js 和 npm 到最新版本。这可能会解决 SSL 握手问题。可以通过 Node.js 官方网站下载最新版本的 Node.js 和 npm。

注意:以上解决方法可能需要根据具体实际情况进行一些调整。


## 参考与链接
* 官方站点: [https://adrianvlupu.github.io/C4-Builder/#/](https://adrianvlupu.github.io/C4-Builder/#/)

*****
*****

更多推荐

自动驾驶中的决策规划

参考:【干货篇】轻舟智航:自动驾驶中的决策规划技术(附视频回放+PPT下载)-AIQ如图所示,各模块介绍定位模块主要负责解答的问题是“车现在在哪里”,是在道路上还是在路口,是在高架桥上还是在停车场里。感知模块则负责解答“车周围有什么”这个问题。预测模块,预测模块主要解答“周围的车现在想干什么”,比如前面的车要cutin

全流程HEC-RAS 1D/2D水动力与水环境模拟丨恒定流模型(1D/2D)、一维非恒定流、二维非恒定流模型、HEC-RAS水质模型

目录​专题一​水动力模型基础专题二恒定流模型(1D/2D)专题三一维非恒定流专题四二维非恒定流模型(一)专题五二维非恒定流模型(二)专题六HEC-RAS的水质模型专题七高级主题更多应用水动力与水环境模型的数值模拟是实现水资源规划、环境影响分析、防洪规划以及未来气候变化下预测和分析的主要手段。然而,一方面水动力和水环境模

3D点云目标检测:Centerformer训练waymo数据集

一、环境准备项目地址:centerformer1.0、基础环境python==3.8.0torch==1.9.1+cu111waymo-open-dataset-tf-2-6-0==1.4.9spconv==1.2.1其余按照requirement.txt里安装就行pipinstall-ihttps://pypi.tu

用微服务平台框架,实现高效的流程化办公!

想要实现流程化办公,可以用什么样的软件平台实现?随着市场竞争越来越激烈,很多企业会采用低代码技术平台实现高效管理企业的内部资源,从而减少很多繁琐工作和时间,实现提质增效的目的。流辰信息助力大家采用微服务平台框架低代码技术平台打破信息孤岛,创造高效办公。低代码的便捷性和灵活性就不言而喻了,它在企业的发展过程中扮演了非常重

K8S-存储卷,pv,pvc

pv,pvc一、emptyDir存储卷1.概述2.示例二、hostPath存储卷1.概述三、nfs共享存储卷1.在stor01节点上安装nfs,并配置nfs服务2.master节点操作3.在nfs服务器上创建index.html4.master节点操作四、PVC和PV1.概述2.PV和PVC之间的相互作用遵循的生命周期

Java高级: 反射

目录反射反射概述反射获取类的字节码反射获取类的构造器反射获取构造器的作用反射获取成员变量&使用反射获取成员方法反射获取成员方法的作用反射的应用案例接下来我们学习的反射、动态代理、注解等知识点,在以后开发中极少用到,这些技术都是以后学习框架、或者做框架的底层源码。讲这些技术的目的,是为了以后我们理解框架、或者自己开发框架

网络安全(黑客)自学

前言我是去年8月22日才正式学习网络安全的,因为在国营单位工作了4年,在广东一个月工资只有5000块,而且看不到任何晋升的希望,如果想要往上走,那背后就一定要有关系才行。而且国营单位的气氛是你干的多了,领导觉得你有野心,你干的不多,领导却觉得你这个人不错。我才24周岁,实在的受不了这种工作氛围,情绪已经压制了很多久,一

网络安全中的欺骗攻击与防御技术

在Internet上计算机之间相互进行的交流建立在两个前提之下:认证、信任。认证是网络上的计算机用于相互间进行识别的一种鉴别过程,经过认证的过程,获准相互交流的计算机之间就会建立起相互信任的关系。信任和认证具有逆反关系,即如果计算机之间存在高度的信任关系,则交流时就不会要求严格的认证。而反之,如果计算机之间没有很好的信

阿里云无影云电脑、VDI以及传统PC电脑有什么区别?

阿里云无影云电脑和传统电脑PC有什么区别?区别大了,无影云电脑是云端的桌面服务,传统PC是本地的硬件计算机,无影云电脑的数据是保存在云端,本地传统PC的数据是保存在本地客户端,阿里云百科分享阿里云无影云电脑和传统PC电脑的详细区别对比:目录无影云电脑和传统电脑区别对比阿里云无影云电脑无影云电脑和传统电脑区别对比阿里云无

webpack打包速度优化

优化WebPack打包速度在开发过程中,WebPack的打包速度是一个非常重要的考虑因素。随着项目规模的增长,打包时间也会越来越长,影响开发效率和用户体验。本文将循序渐进地介绍一些优化WebPack打包速度的方法,先分析打包瓶颈,然后逐步优化。分析打包瓶颈在开始优化之前,我们需要了解当前项目的打包瓶颈在哪里。为了帮助我

Java集成支付宝沙箱支付,详细教程(SpringBoot完整版)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录一、开发前准备?二、使用步骤1、引入库2、配置在application.yml里面进行配置:3、alipay的java配置:AplipayConfig.java4、支付接口4、回调接口一、开发前准备?easy支付官方文档:https://opend

热文推荐