Iotgateway技术手册-3. 架构设计

3. 架构设计

IoT Gateway 采用了清晰的分层架构设计,各层职责明确,便于维护和扩展。这种架构设计使得系统具有良好的模块化特性,能够适应不同规模和需求的应用场景。

Iotgateway 网关

3.1 分层架构

IoT Gateway 的分层架构设计如下:

复制代码
┌─────────────────────────────────────────────────────────────────┐
│                         Web 界面层                              │
│  (Razor Views、Controllers、JavaScript、CSS)                     │
└─────────────────────────────────────────────────────────────────┘
                                │
┌─────────────────────────────────────────────────────────────────┐
│                         应用服务层                              │
│  (DeviceService、DriverService、MyMqttClient、UAService 等)      │
└─────────────────────────────────────────────────────────────────┘
                                │
┌─────────────────────────────────────────────────────────────────┐
│                         业务逻辑层                              │
│  (DeviceThread、IoTBackgroundService 等)                        │
└─────────────────────────────────────────────────────────────────┘
                                │
┌─────────────────────────────────────────────────────────────────┐
│                         数据访问层                              │
│  (DataContext、Entity Framework Core)                           │
└─────────────────────────────────────────────────────────────────┘
                                │
┌─────────────────────────────────────────────────────────────────┐
│                         数据模型层                              │
│  (Device、Driver、DeviceVariable 等)                            │
└─────────────────────────────────────────────────────────────────┘
                                │
┌─────────────────────────────────────────────────────────────────┐
│                         插件驱动层                              │
│  (IDriver 接口、各种设备驱动实现)                                │
└─────────────────────────────────────────────────────────────────┘

3.2 各层职责

3.2.1 Web 界面层

职责

  • 提供用户交互界面

  • 处理 HTTP 请求和响应

  • 实现 MVC 模式

  • 提供 API 接口

主要组件

  • Controllers:处理 HTTP 请求,调用业务逻辑层

  • Views:渲染 HTML 页面,展示数据

  • Models:视图模型,用于数据绑定

  • JavaScript/CSS:实现前端交互和样式

技术实现

  • ASP.NET Core MVC

  • Razor 视图引擎

  • LayUI UI 框架

  • jQuery、Vue.js 等前端库

3.2.2 应用服务层

职责

  • 实现核心业务逻辑

  • 管理设备和驱动

  • 处理 MQTT 通信

  • 实现 OPC UA 功能

主要组件

  • DeviceService:设备管理服务

  • DriverService:驱动管理服务

  • MyMqttClient:MQTT 客户端服务

  • UAService:OPC UA 服务

  • ModbusSlaveService:Modbus 从站服务

技术实现

  • ASP.NET Core 服务

  • 依赖注入

  • 异步编程

3.2.3 业务逻辑层

职责

  • 实现具体的业务逻辑

  • 处理设备数据采集

  • 执行 RPC 命令

  • 管理设备线程

主要组件

  • IoTBackgroundService:后台服务

  • DeviceThread:设备线程

  • 各种业务逻辑类

技术实现

  • .NET 后台服务

  • 多线程编程

  • 任务并行库

3.2.4 数据访问层

职责

  • 实现数据库访问

  • 处理数据持久化

  • 执行数据库查询和更新

主要组件

  • DataContext:数据库上下文

  • Entity Framework Core 配置

  • 数据库迁移

技术实现

  • Entity Framework Core

  • LINQ 查询

  • 数据库迁移

3.2.5 数据模型层

职责

  • 定义数据实体

  • 实现实体关系

  • 定义数据验证规则

主要组件

  • Device:设备实体

  • Driver:驱动实体

  • DeviceVariable:设备变量实体

  • DeviceConfig:设备配置实体

  • SystemConfig:系统配置实体

技术实现

  • .NET 类库

  • 数据注解

  • 实体关系映射

3.2.6 插件驱动层

职责

  • 定义驱动接口

  • 实现设备驱动

  • 支持动态加载

主要组件

  • IDriver 接口:驱动接口定义

  • 各种设备驱动实现

  • 驱动加载机制

技术实现

  • 插件化架构

  • 反射机制

  • 接口设计

3.3 设计原则

3.3.1 单一职责原则

每个组件和类只负责一个特定的功能,便于维护和测试。例如:

  • DeviceService 只负责设备管理

  • DriverService 只负责驱动管理

  • MyMqttClient 只负责 MQTT 通信

3.3.2 依赖倒置原则

高层模块不依赖于低层模块,而是依赖于抽象。例如:

  • DeviceService 依赖于 IDriver 接口,而不是具体的驱动实现

  • DeviceThread 依赖于 IDriver 接口,而不是具体的驱动实现

3.3.3 接口隔离原则

客户端不应该依赖于它不需要的接口。例如:

  • IDriver 接口只包含驱动必需的方法和属性

  • 其他辅助功能通过扩展方法或其他方式实现

3.3.4 开放封闭原则

软件实体应该对扩展开放,对修改封闭。例如:

  • 新增设备驱动只需要实现 IDriver 接口,不需要修改现有代码

  • 新增功能可以通过扩展现有组件实现,不需要修改核心代码

3.3.5 里氏替换原则

子类应该能够替换其父类。例如:

  • 任何实现了 IDriver 接口的驱动都可以替换其他驱动

  • 设备线程可以使用任何驱动实现

3.4 核心设计模式

3.4.1 插件模式

采用插件模式实现驱动的动态加载和扩展:

  • 驱动实现 IDriver 接口

  • 网关通过反射动态加载驱动程序集

  • 驱动可以独立开发和部署

3.4.2 观察者模式

采用观察者模式实现事件通知:

  • MyMqttClient 发布 RPC 事件

  • DeviceThread 订阅 RPC 事件

  • 当收到 RPC 命令时,通知相应的设备线程处理

3.4.3 工厂模式

采用工厂模式创建驱动实例:

  • DriverService 作为驱动工厂

  • 根据驱动类型创建相应的驱动实例

  • 隐藏驱动创建的细节

3.4.4 单例模式

采用单例模式管理全局服务:

  • DeviceService、DriverService 等核心服务采用单例模式

  • 确保全局只有一个实例

  • 便于服务之间的通信和协作

3.4.5 策略模式

采用策略模式实现不同数据处理逻辑:

  • 支持多种数据处理策略

  • 根据设备配置选择相应的处理策略

  • 便于扩展新的数据处理逻辑

3.5 架构优势

3.5.1 模块化设计

  • 各层职责明确,便于维护和扩展

  • 组件之间低耦合,高内聚

  • 便于团队协作开发

3.5.2 可扩展性

  • 支持动态加载驱动

  • 便于扩展新的设备协议

  • 便于集成新的 IoT 平台

3.5.3 可靠性

  • 各层之间有明确的边界,便于错误隔离

  • 完善的错误处理和恢复机制

  • 支持设备连接状态监控和自动重连

3.5.4 性能优化

  • 采用多线程并发处理

  • 异步编程模型

  • 高效的数据处理算法

3.5.5 安全性

  • 分层架构便于实现安全控制

  • 支持身份认证和授权

  • 数据传输加密

3.6 架构演进

3.6.1 初始架构

  • 简单的分层架构

  • 支持基本的设备管理和数据采集

  • 单一数据库支持

3.6.2 当前架构

  • 完善的分层架构

  • 支持多种设备协议和驱动

  • 支持多种数据库和 IoT 平台

  • 实现了 OPC UA 和 Modbus 功能

3.6.3 未来架构

  • 微服务架构

  • 支持边缘计算

  • 增强的数据分析和可视化

  • 更完善的安全机制

3.7 架构最佳实践

3.7.1 代码组织

  • 按照功能模块组织代码

  • 采用清晰的命名规范

  • 保持代码简洁和可读性

3.7.2 依赖管理

  • 采用依赖注入管理组件依赖

  • 避免循环依赖

  • 合理使用单例和作用域

3.7.3 错误处理

  • 采用集中式错误处理

  • 完善的日志记录

  • 友好的错误提示

3.7.4 性能优化

  • 合理使用缓存

  • 异步编程

  • 避免不必要的数据库查询

3.7.5 测试策略

  • 单元测试

  • 集成测试

  • 端到端测试

  • 性能测试


文档版本 :1.0 更新日期 :2025-11-29 编写人员:辉为科技

相关推荐
peixiuhui18 小时前
Iotgateway技术手册-7. 数据库设计
数据库·iotgateway·开源dotnet·arm工控板·开源网关软件·开源数据采集
peixiuhui18 小时前
Iotgateway技术手册-9. 部署与运行
网关·开源软件·iotgateway·开源网关·mqtt开源·开源dotnet
peixiuhui18 小时前
Iotgateway技术手册-4. 核心组件
开源软件·iotgateway·开源网关·mqtt开源·开源采集网关
金线银线还是铜线?1 天前
米德方格MF9005/MF9006:低功耗光能利用的PMIC芯片解析
嵌入式硬件·物联网·iot·太阳能
武藤一雄1 天前
C# 关于多线程如何实现需要注意的问题(持续更新)
windows·后端·microsoft·c#·.net·.netcore·死锁
我是唐青枫1 天前
深入理解 System.Lazy<T>:C#.NET 延迟初始化与线程安全
c#·.net
波波0072 天前
.sln 时代落幕,.slnx成为 .NET 新标准?
.net·vs
mudtools2 天前
基于.NET操作Excel COM组件生成数据透视报表
c#·.net·excel
冰茶_2 天前
WPF路由事件:隧道与冒泡机制解析
学习·c#·.net·wpf·.netcore·mvvm