You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Structurizr中使用!include引入多个文件构建工作区

Structurizr DSL多文件引入的正确实现方式

核心问题分析

你之前的报错大概率是因为外部DSL文件包含独立的model块,同时主文件在workspace块内直接引入这些文件——Structurizr DSL要求一个工作区只能有一个顶级model块,重复定义会引发语法冲突。extends只能单文件扩展的限制确实没法满足多文件拆分需求,改用!include的正确姿势是把外部文件作为主文件model(或views)块的内容片段,而非独立的完整DSL文件。


正确文件结构示例

假设你的文件都放在同一目录下:

  • main.dsl(主文件,负责顶层工作区、模型、视图的框架)
  • teste2.dsl(外部文件,存放部分软件系统/容器定义)
  • teste3.dsl(外部文件,存放剩余组件/关系定义)

主文件 (main.dsl) 写法

主文件需要完整包裹workspace块,在model(或views)内部使用!include引入外部文件的内容片段:

workspace "My Multi-File Workspace" {
    model {
        // 引入外部模型定义文件
        !include teste2.dsl
        !include teste3.dsl

        // 主文件内也可直接补充全局元素或关系
        endUser = person "终端用户"
        endUser -> OrderSystem "提交订单"
    }

    views {
        // 视图定义可集中在主文件,也可拆分到外部文件后用!include引入
        systemLandscape {
            include *
            autoLayout
        }
    }
}

外部文件 (teste2.dsl) 写法

不要写独立的model块,直接写模型元素的定义即可:

// 直接定义软件系统和容器
OrderSystem = softwareSystem "订单系统" {
    OrderService = container "订单服务" {
        OrderApi = component "订单API组件"
    }
}

外部文件 (teste3.dsl) 写法

同样直接写元素或跨文件的关系定义:

// 定义另一个软件系统和依赖
InventorySystem = softwareSystem "库存系统" {
    InventoryDb = container "库存数据库"
}

// 跨文件的组件关系直接定义即可
OrderSystem.OrderService.OrderApi -> InventorySystem.InventoryDb "查询库存"

额外注意事项

  • 如果需要拆分视图定义,同样可以在主文件的views块内用!include引入外部视图文件,外部视图文件直接写视图内容(不需要views块包裹)。
  • 若外部文件不在当前目录,可使用相对路径(比如!include ./models/teste2.dsl)或绝对路径。

内容的提问来源于stack exchange,提问作者user29715992

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 08:27:16