欢迎参加 Visual Paradigm 技术团队带来的又一堂大师级教程!在设计复杂的企業架构时,保持图表整洁、有序且结构合理可能颇具挑战。传统的拖放工具在布局调整或需求变更时往往会拖慢您的进度。这就是为什么许多软件架构师和企业设计师依赖“以代码绘图”的工作流程。
在本指南中,我将带您逐步了解我为构建一个全面的多层 ArchiMate 架构图表所采用的具体思路,该图表用于图书馆管理系统。在免费 PlantUML 编辑器上Visual Paradigm VPasCode,我们将详细解析如何构建企业层级、清晰定义元素,并绘制精确的跨层关系。

理解 ArchiMate 架构层级
当我着手对企业系统进行建模时,我总是从定义结构边界开始。ArchiMate 将关注点划分为不同的架构层级,帮助利益相关者一目了然地理解业务价值、功能逻辑、应用组件和技术基础设施。
对于我们的图书馆系统,我们将图表组织为四个明确的垂直和水平分组:
- 动机层:捕捉指导组织的高层目标和驱动因素。
- 业务层:突出显示参与者、服务以及核心业务流程,如图书借阅和预约。
- 应用层:定义处理核心逻辑的软件服务和应用组件。
- 技术层:表示托管我们应用栈的物理或虚拟硬件节点。
步骤 1:设置基础结构
开始编写代码时,我首先配置全局渲染规则并导入 PlantUML 的官方 ArchiMate 标准库。设置正交线型可确保连接线清晰且以直角对齐,这对于构建整洁的企业蓝图至关重要。
skinparam linetype ortho
!include https://static.visual-paradigm.com/plantuml-stdlib/Archimate-PlantUML/master/Archimate.puml
remove @unlinked
top to bottom direction
title Introductory - Library Management System
通过强制自上而下的方向并移除未连接的元素,我确保布局从顶层业务动机自然流向技术基础设施。
步骤 2:定义核心层级与元素
接下来,我将各个分组容器填充相应的元素。我倾向于使用 PlantUML 的分组块显式地对相关组件进行分组,以便视觉边界与企业领域相匹配。
Grouping(motivation_layer, "动机层") {
Motivation_Goal(g_ops, "高效的图书馆运营")
Motivation_Goal(g_service, "高质量的读者服务")
}
Grouping(business_layer, "业务层") {
Business_Actor(ba_librarian, "图书管理员")
Business_Actor(ba_member, "图书馆成员")
Business_Service(bs_circulation, "流通服务")
Business_Service(bs_catalog, "目录服务")
Business_Process(bp_checkout, "借阅/归还")
Business_Process(bp_reserve, "管理预约")
}
Grouping(application_layer, "应用层") {
Application_Service(as_circulation, "流通应用服务")
Application_Service(as_catalog, "目录应用服务")
Application_Component(ac_lms, "图书馆管理系统")
Application_Component(ac_catalog, "目录数据库")
}
Grouping(technology_layer, "技术层") {
Technology_Node(tn_server, "应用服务器")
Technology_Node(tn_db, "数据库服务器")
}
为什么要这样结构化? 显式地为元素添加前缀(例如“ba_ 用于业务参与者,bp_ 用于流程,以及tn_ 用于技术节点)使得后续编写复杂的关系映射变得容易得多。它可以防止命名冲突,并保持脚本的自文档化特性。
步骤 3:跨层映射关系
在元素就位后,最后一步是将它们连接起来。ArchiMate 依赖精确的关系类型——如实现、服务、触发和分配——来准确建模依赖关系。
' 业务流程实现业务服务
Rel_Realization_Up(bp_checkout, bs_circulation, "")
Rel_Realization_Up(bp_reserve, bs_circulation, "")
Rel_Triggering_Right(bp_checkout, bp_reserve, "")
' 业务服务实现动机目标
Rel_Realization_Up(bs_circulation, g_ops, "")
Rel_Serving_Up(bs_catalog, g_service, "")
' 业务服务为参与者提供服务
Rel_Serving_Up(bs_circulation, ba_librarian, "")
Rel_Serving_Up(bs_catalog, ba_member, "")
' 应用服务实现业务服务
Rel_Realization_Up(as_circulation, bs_circulation, "")
Rel_Realization_Up(as_catalog, bs_catalog, "")
' 应用组件实现应用服务
Rel_Realization_Up(ac_lms, as_circulation, "")
Rel_Realization_Up(ac_catalog, as_catalog, "")
' 技术节点分配(部署)应用组件
Rel_Assignment_Up(tn_server, ac_lms, "")
Rel_Assignment_Up(tn_db, ac_catalog, "")
通过使用方向性关系标签,例如Rel_Realization_Up 和Rel_Triggering_Right,我可以精确控制连接器在画布上的路由方式,避免杂乱的线条重叠。
完整源代码
以下是我们图书馆管理系统架构图的完整、可直接用于生产的 PlantUML 脚本:
@startuml
skinparam linetype ortho
!include https://static.visual-paradigm.com/plantuml-stdlib/Archimate-PlantUML/master/Archimate.puml
remove @unlinked
top to bottom direction
title Introductory - Library Management System
Grouping(motivation_layer, "Motivation Layer") {
Motivation_Goal(g_ops, "Efficient Library Operations")
Motivation_Goal(g_service, "High-Quality Reader Service")
}
Grouping(business_layer, "Business Layer") {
Business_Actor(ba_librarian, "Librarian")
Business_Actor(ba_member, "Library Member")
Business_Service(bs_circulation, "Circulation Service")
Business_Service(bs_catalog, "Catalog Service")
Business_Process(bp_checkout, "Check Out / Return")
Business_Process(bp_reserve, "Manage Reservations")
}
Grouping(application_layer, "Application Layer") {
Application_Service(as_circulation, "Circulation Application Service")
Application_Service(as_catalog, "Catalog Application Service")
Application_Component(ac_lms, "Library Management System")
Application_Component(ac_catalog, "Catalog Database")
}
Grouping(technology_layer, "Technology Layer") {
Technology_Node(tn_server, "Application Server")
Technology_Node(tn_db, "Database Server")
}
' Business processes realize business services
Rel_Realization_Up(bp_checkout, bs_circulation, "")
Rel_Realization_Up(bp_reserve, bs_circulation, "")
Rel_Triggering_Right(bp_checkout, bp_reserve, "")
' Business services realize motivation goals
Rel_Realization_Up(bs_circulation, g_ops, "")
Rel_Serving_Up(bs_catalog, g_service, "")
' Actors are served by business services
Rel_Serving_Up(bs_circulation, ba_librarian, "")
Rel_Serving_Up(bs_catalog, ba_member, "")
' Application services realize business services
Rel_Realization_Up(as_circulation, bs_circulation, "")
Rel_Realization_Up(as_catalog, bs_catalog, "")
' Application components realize application services
Rel_Realization_Up(ac_lms, as_circulation, "")
Rel_Realization_Up(ac_catalog, as_catalog, "")
' Technology nodes assign (deploy) application components
Rel_Assignment_Up(tn_server, ac_lms, "")
Rel_Assignment_Up(tn_db, ac_catalog, "")
@enduml
使用 VPasCode 让您的架构栩栩如生

以代码形式进行绘图使您能够版本控制您的架构、无缝协作,并在几秒钟内生成完美的图表。无论您是在构建 ArchiMate 企业模型、C4 软件架构还是标准 UML 序列图,在一个稳健的环境中完成这些工作都将带来显著差异。


