Files
arxml_sdk/docs/architecture.md
T
2026-06-02 15:21:07 +08:00

10 KiB

项目架构

整体架构图

arxml_sdk/
├── src/                           # 源代码
│   ├── __init__.py               # 包入口,导出全部公共API
│   ├── core/                      # 核心基础设施层
│   │   ├── __init__.py
│   │   ├── base.py               # Base 基类
│   │   ├── constants.py          # ARXML 标签常量
│   │   └── enums.py              # AUTOSAR 枚举类型
│   ├── types/                     # 数据类型层
│   │   ├── __init__.py
│   │   ├── base_type.py          # 基础数据类型
│   │   ├── unit.py               # 单位类型
│   │   ├── data_constraint.py    # 数据约束
│   │   ├── compu_method.py       # 计算方法
│   │   ├── application_types.py # 应用数据类型
│   │   ├── implementation_types.py # 实现数据类型
│   │   ├── sw_addr_method.py     # 软件地址方法
│   │   ├── data_mapping.py       # 数据类型映射
│   │   ├── sw_component_type.py  # 软件组件类型
│   │   ├── interface.py          # 接口定义
│   │   ├── package.py            # 包管理
│   │   └── swc_internal_behavior.py # SWC内部行为
│   └── utils/                     # 工具层
│       ├── __init__.py
│       └── arxml_writer.py       # ARXML文档写入
└── tests/                         # 测试

模块职责

core 模块 - 核心基础设施层

提供 SDK 运行所需的基础组件,不依赖其他业务模块。

文件 职责 关键类/函数
base.py 定义所有类型的基础类 Base (dataclass), create_uuid(), create_text_element()
constants.py ARXML 标签常量统一管理 约140个XML标签常量定义
enums.py AUTOSAR 枚举类型定义 Category, Encoding, PortDirection 等12个枚举

Base 类核心属性:

属性 类型 说明
name str 元素名称
id Optional[int] 元素标识符
parent Optional[Base] 父元素引用
description Optional[str] 元素描述
package_path str 完整包路径 (如 /Pkg1/Pkg2/Name)

Base 类核心方法:

方法 说明
to_arxml(doc) 抽象方法,将对象序列化为 ARXML DOM 元素
class_name 属性,获取类型名称
parent_id 属性,获取父类 ID

types 模块 - 数据类型层

实现 AUTOSAR 数据模型的各个类型,依赖 core 模块。

文件 职责 主要类
base_type.py 基础数据类型 (SW-BASE-TYPE) BaseType
unit.py 数据单位 Unit
data_constraint.py 数据约束范围 DataConstraint
compu_method.py 计算方法 (线性转换/文本表) Linear, TextTable, CompuMethod
application_types.py 应用层数据类型 ApplicationBooleanDataType, ApplicationValueDataType, ApplicationStructureDataType, ApplicationArrayDataType
implementation_types.py 实现层数据类型 ImplementationValueDataType, ImplementationStructureDataType, ImplementationArrayDataType
sw_addr_method.py 软件地址方法 SwAddrMethod
data_mapping.py 应用-实现类型映射 DataTypeMapping, DataTypeMappingSet
sw_component_type.py 软件组件类型和端口 ApplicationSwComponentType, RPortPrototype, PPortPrototype, PRPortPrototype
interface.py 接口定义 SenderReceiverInterface, ClientServerInterface, ModeSwitchInterface
package.py AUTOSAR 包 Package
swc_internal_behavior.py SWC 内部行为 RunnableEntity, TimingEvent, InitEvent, SwcInternalBehavior

utils 模块 - 工具层

提供 ARXML 文档创建和写入功能。

文件 职责 关键函数
arxml_writer.py ARXML 文档创建和写入 create_arxml_document(), write_arxml(), write_arxml_pretty()

类型继承体系

Base (core.base)
├── BaseType (types.base_type)
├── Unit (types.unit)
├── DataConstraint (types.data_constraint)
├── CompuMethod (types.compu_method)
│   ├── Linear
│   └── TextTable
├── ApplicationDataType (types.application_types)
│   ├── ApplicationBooleanDataType
│   ├── ApplicationValueDataType
│   ├── ApplicationStructureDataType
│   │   └── StructureElement (内部类)
│   └── ApplicationArrayDataType
│       └── ArrayElement (内部类)
├── ImplementationDataType (types.implementation_types)
│   ├── ImplementationValueDataType
│   ├── ImplementationStructureDataType
│   │   └── StructureElement (内部类)
│   └── ImplementationArrayDataType
│       └── ArrayElement (内部类)
├── SwAddrMethod (types.sw_addr_method)
├── DataTypeMapping (types.data_mapping)
│   └── DataTypeMappingSet
├── SwComponentType (types.sw_component_type)
│   ├── AtomicComponentType
│   │   └── ApplicationSwComponentType
│   └── CompositionSwComponentType
├── PortPrototype (types.sw_component_type)
│   ├── RPortPrototype
│   ├── PPortPrototype
│   └── PRPortPrototype
├── Interface (types.interface)
│   ├── SenderReceiverInterface
│   │   └── DataElement (内部类)
│   ├── ClientServerInterface
│   │   ├── Operation (内部类)
│   │   └── Argument (内部类)
│   ├── ModeSwitchInterface
│   ├── ParameterInterface
│   ├── TriggerInterface
│   └── NvDataInterface
├── Package (types.package)
└── SwcInternalBehavior (types.swc_internal_behavior)
    ├── RunnableEntity
    └── EventType (Union)
        ├── InitEvent
        ├── TimingEvent
        ├── OperationInvokedEvent
        └── DataReceivedEvent

依赖关系图

                    ┌─────────────────────────────────────┐
                    │      arxml_sdk (src/__init__.py)     │
                    │   导出全部 193 个公共 API 符号        │
                    └─────────────────────────────────────┘
                                     │
         ┌───────────────────────────┼───────────────────────────┐
         │                           │                           │
         ▼                           ▼                           ▼
┌─────────────────┐      ┌─────────────────┐      ┌─────────────────┐
│   core 模块     │      │   types 模块    │      │   utils 模块    │
│   (基础设施层)  │      │   (业务逻辑层)  │      │   (工具层)      │
├─────────────────┤      ├─────────────────┤      ├─────────────────┤
│ Base 基类       │      │ 数据类型类      │      │ ARXML文档创建   │
│ 常量定义       │◄─────►│ 组件类型类      │      │ ARXML文件写入   │
│ 枚举定义       │      │ 接口定义类      │      │                 │
│ UUID/文本工具  │      │ 包管理类        │      │                 │
└─────────────────┘      │ 内部行为类      │      └─────────────────┘
                         └─────────────────┘
                                    │
                                    ▼
                         ┌─────────────────┐
                         │   tests 模块    │
                         │   (测试层)      │
                         ├─────────────────┤
                         │ 单元测试        │
                         │ 集成测试        │
                         └─────────────────┘

依赖约束:

  • core → 无依赖(最底层)
  • types → 依赖 core
  • utils → 依赖 core
  • tests → 依赖 src 所有模块

设计模式

1. 工厂函数模式

所有类型都配有 create_xxx() 工厂函数,简化对象创建:

# 使用工厂函数
uint8 = create_base_type("UInt8", size=8)

# 替代直接实例化(如果存在构造函数)
uint8 = BaseType(name="UInt8", size=8)

2. 组合模式

通过 add_xxx() 方法支持动态添加子元素:

component = ApplicationSwComponentType(name="Sensor")
component.add_port(PPortPrototype(name="DataPort"))

3. 序列化模式

所有类型都实现 to_arxml(doc) 方法,将自身序列化为 ARXML DOM 元素:

element = component.to_arxml(doc)

4. 数据类模式

使用 @dataclass 简化数据类定义:

@dataclass
class BaseType:
    name: str
    size: int
    category: Optional[Category] = None
    encoding: Optional[Encoding] = None

数据流

用户代码
    │
    ▼
创建对象 (工厂函数)
    │
    ├──► BaseType, ApplicationDataType, SwComponentType 等
    │
    ▼
序列化 (to_arxml)
    │
    ├──► XML DOM Element
    │
    ▼
写入文件 (arxml_writer)
    │
    ▼
.arxml 文件

技术栈

方面 详情
编程语言 Python 3
标准库 uuid, xml.dom.minidom, dataclasses, typing, enum
测试框架 pytest
目标格式 AUTOSAR ARXML (R4.4 schema)
版本 2.0.1