掌握 ArchiMate 建模:使用 PlantUML 构建图书馆管理系统

欢迎参加 Visual Paradigm 技术团队带来的又一堂大师级教程!在设计复杂的企業架构时,保持图表整洁、有序且结构合理可能颇具挑战。传统的拖放工具在布局调整或需求变更时往往会拖慢您的进度。这就是为什么许多软件架构师和企业设计师依赖“以代码绘图”的工作流程。

在本指南中,我将带您逐步了解我为构建一个全面的多层 ArchiMate 架构图表所采用的具体思路,该图表用于图书馆管理系统。在免费 PlantUML 编辑器Visual Paradigm VPasCode,我们将详细解析如何构建企业层级、清晰定义元素,并绘制精确的跨层关系。

A PlantUML formatted ArchiMate diagram

理解 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_UpRel_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 让您的架构栩栩如生

A screenshot of Visual Paradigm VPasCode showing the creation of an ArchiMate Diagram

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

准备好构建您自己的图表了吗?

试用我们的实时渲染引擎,体验基于 AI 的图表生成功能,并立即导出干净的矢量图形。

立即试用免费的“以代码绘图”工具

滚动至顶部