首页
/ TMom后端技术解析:基于.NET8、SqlSugar和DDD架构

TMom后端技术解析:基于.NET8、SqlSugar和DDD架构

2026-02-04 04:50:58作者:蔡丛锟

TMom后端采用现代化技术栈与架构设计,支持多厂区、多项目级的MOM/MES系统需求。本文将从技术选型(.NET8框架、SqlSugar ORM、DDD分层架构)、模块化设计、性能优化(Redis缓存、动态数据源)及代码生成工具四个维度展开解析,揭示其高性能、可扩展的实现原理。

后端技术选型与架构设计

TMom 后端采用了现代化的技术栈和架构设计,以支持多厂区、多项目级的 MOM/MES 系统需求。本节将深入探讨其技术选型与架构设计的关键点,帮助开发者理解其核心实现逻辑。

技术选型

1. .NET 8 作为核心框架

TMom 后端基于 .NET 8 构建,充分利用了其高性能、跨平台特性以及丰富的生态系统。.NET 8 提供了以下优势:

  • 高性能:优化的运行时和编译器提升了系统吞吐量。
  • 跨平台支持:可在 Windows、Linux 和 macOS 上无缝运行。
  • 现代化工具链:内置依赖注入、配置管理等特性,简化了开发流程。

2. SqlSugar ORM

SqlSugar 是 TMom 的核心数据访问框架,其轻量级和高性能特性使其成为理想选择。以下是 SqlSugar 的关键特性:

  • 多数据库支持:支持 SQL Server、MySQL、PostgreSQL 等多种数据库,便于切换和扩展。
  • 高性能查询:内置缓存机制和高效的 SQL 生成器,优化了数据访问性能。
  • DDD 友好:通过 SqlSugarScopeConnectionConfig 实现了领域驱动的数据访问设计。
// 示例:SqlSugar 配置
services.AddSingleton<ISqlSugarClient>(o =>
{
    return new SqlSugarScope(new ConnectionConfig()
    {
        ConnectionString = "Server=.;Database=TMom;Trusted_Connection=True;",
        DbType = DbType.SqlServer,
        IsAutoCloseConnection = true
    });
});

3. DDD 架构

TMom 采用了领域驱动设计(DDD)架构,将业务逻辑与基础设施分离,提升了代码的可维护性和扩展性。以下是其核心分层:

  • 领域层(Domain):包含业务实体、聚合根和领域服务,如 SysUserWorkOrder 等。
  • 应用层(Application):协调领域对象和基础设施,提供用例实现,如 SysUserService
  • 基础设施层(Infrastructure):处理数据持久化、缓存等,如 SqlSugarRedis 集成。
classDiagram
    class SysUser {
        +Guid Id
        +string Name
        +string Password
    }
    class SysUserService {
        +ISqlSugarClient Db
        +GetUserById(Guid id)
    }
    class ISqlSugarClient {
        +Queryable<T> Queryable<T>()
    }
    SysUserService --> ISqlSugarClient
    SysUserService --> SysUser

架构设计

1. 模块化设计

TMom 后端通过模块化设计实现了功能解耦,每个模块(如 SysProductDev)独立管理其领域逻辑和数据访问。例如:

  • Sys 模块:处理用户、角色、菜单等系统管理功能。
  • Product 模块:管理工单、产品锁定等生产相关功能。

2. 分层清晰

通过分层架构,TMom 实现了职责分离:

  • 表现层(API):提供 RESTful 接口,如 SysUserController
  • 应用层:协调领域逻辑,如 SysUserService
  • 领域层:定义业务规则,如 SysUser 实体。
  • 基础设施层:处理数据持久化和外部服务,如 SqlSugar

3. 缓存与性能优化

TMom 利用 Redis 和内存缓存优化性能:

  • Redis:用于会话管理和高频数据缓存。
  • SqlSugar 缓存:通过 CacheAOP 实现方法级缓存,减少数据库访问。
flowchart LR
    A[API 请求] --> B[应用层服务]
    B --> C{缓存命中?}
    C -->|是| D[返回缓存数据]
    C -->|否| E[数据库查询]
    E --> F[更新缓存]
    F --> D

4. 数据隔离与多租户

通过 SqlSugar 的动态数据源切换和 GlobalVars 配置,TMom 支持多厂区数据隔离。例如:

  • 动态连接字符串:根据租户 ID 切换数据库连接。
  • 全局配置:通过 GlobalVars 管理多租户共享的常量。
// 示例:多租户数据源切换
public class BaseDBConfig
{
    public static string GetConnectionString(string tenantId)
    {
        return $"Server=.;Database=TMom_{tenantId};Trusted_Connection=True;";
    }
}

总结

TMom 后端通过 .NET 8、SqlSugar 和 DDD 架构的有机结合,实现了高性能、可扩展和易维护的系统设计。其模块化、分层和缓存机制为复杂的生产制造场景提供了可靠支持。

SqlSugar ORM框架的使用与优化

在TMom项目中,SqlSugar作为核心的ORM框架,为数据访问层提供了高效、灵活的解决方案。本节将深入探讨SqlSugar在项目中的具体应用及其优化策略,帮助开发者更好地理解和利用这一工具。

1. SqlSugar的基本使用

SqlSugar在TMom项目中的使用主要集中在数据访问层(Repository层),通过BaseRepositoryUnitOfWork实现数据的CRUD操作和事务管理。

1.1 数据库连接配置

SqlSugar的数据库连接配置通常位于appsettings.json文件中,通过ISqlSugarClient接口注入到应用中。以下是一个典型的配置示例:

{
  "ConnectionStrings": {
    "Default": "Server=localhost;Database=TMom;User ID=sa;Password=123456;"
  }
}

在代码中,通过SqlSugarScope管理数据库连接:

public class UnitOfWork : IUnitOfWork
{
    private readonly ISqlSugarClient _sqlSugarClient;

    public UnitOfWork(ISqlSugarClient sqlSugarClient, ILogger<UnitOfWork> logger)
    {
        _sqlSugarClient = sqlSugarClient;
    }

    public SqlSugarScope GetDbClient()
    {
        return _sqlSugarClient as SqlSugarScope;
    }
}

1.2 基础CRUD操作

BaseRepository封装了常见的CRUD操作,例如:

public class BaseRepository<T> where T : class, new()
{
    private ISqlSugarClient _db;

    public BaseRepository(ISqlSugarClient db)
    {
        _db = db;
    }

    public async Task<List<T>> GetListAsync()
    {
        return await _db.Queryable<T>().ToListAsync();
    }

    public async Task<T> GetByIdAsync(int id)
    {
        return await _db.Queryable<T>().InSingleAsync(id);
    }

    public async Task<bool> InsertAsync(T entity)
    {
        return await _db.Insertable(entity).ExecuteCommandAsync() > 0;
    }
}

2. SqlSugar的高级特性

2.1 动态表达式树

SqlSugar支持动态表达式树,可以灵活构建查询条件。例如:

var query = _db.Queryable<Product>()
    .WhereIF(!string.IsNullOrEmpty(keyword), p => p.Name.Contains(keyword))
    .WhereIF(categoryId > 0, p => p.CategoryId == categoryId)
    .ToList();

2.2 事务管理

通过UnitOfWork实现跨Repository的事务管理:

public async Task<bool> SaveOrderAsync(Order order, List<OrderDetail> details)
{
    try
    {
        _db.BeginTran();
        await _orderRepository.InsertAsync(order);
        await _orderDetailRepository.InsertRangeAsync(details);
        _db.CommitTran();
        return true;
    }
    catch
    {
        _db.RollbackTran();
        return false;
    }
}

3. SqlSugar的性能优化

3.1 批量操作

SqlSugar提供了高效的批量操作方法,例如:

// 批量插入
await _db.Insertable(list).ExecuteCommandAsync();

// 批量更新
await _db.Updateable(list).ExecuteCommandAsync();

3.2 查询优化

通过WithCache方法启用查询缓存,减少数据库压力:

var products = await _db.Queryable<Product>().WithCache().ToListAsync();

3.3 分页查询

分页查询时,使用ToPageListAsync方法:

var page = await _db.Queryable<Product>()
    .Where(p => p.Price > 100)
    .ToPageListAsync(pageIndex, pageSize);

4. 总结

SqlSugar在TMom项目中展现了强大的ORM能力,通过合理配置和优化,可以显著提升数据访问的效率和性能。开发者应充分利用其动态表达式树、事务管理和批量操作等特性,以满足复杂业务场景的需求。

DDD架构在TMom中的实践

TMom项目采用了领域驱动设计(DDD)架构,通过分层和模块化的方式实现了高内聚、低耦合的设计目标。以下将从领域模型、仓储模式、聚合根设计等方面展开分析。

领域模型设计

在TMom中,领域模型通过TMom.Domain.Model项目定义,涵盖了系统的核心业务逻辑。每个领域实体均继承自RootEntity<T>,确保了一致性和扩展性。例如:

public class SysUser : RootEntity<int>
{
    public string UserName { get; set; }
    public string Password { get; set; }
    // 其他属性
}

通过这种方式,所有实体共享基础的Id和审计字段(如CreateTimeUpdateTime),同时支持泛型主键类型。

实体分类

TMom的领域模型按功能模块分类,例如:

  • 系统管理SysUserSysRoleSysMenu等。
  • 生产建模WorkstationLineWorkshop等。
  • 工艺管理ProcessRouteProcessOperation等。

仓储模式实现

仓储层通过TMom.Domain.IRepositoryTMom.Infrastructure.Repository项目实现。接口定义在IRepository中,具体实现在Infrastructure中。例如:

// 接口定义
public interface ISysUserRepository : IBaseRepository<SysUser>
{
    // 自定义方法
}

// 实现类
public class SysUserRepository : BaseRepository<SysUser>, ISysUserRepository
{
    // 实现自定义方法
}

仓储的核心功能

  • 基础操作:通过IBaseRepository<T>提供通用的CRUD操作。
  • 事务管理:通过UnitOfWork实现跨仓储的事务一致性。
classDiagram
    class IBaseRepository {
        <<interface>>
        +GetById(id) T
        +Insert(entity) void
        +Update(entity) void
        +Delete(entity) void
    }
    class ISysUserRepository {
        <<interface>>
        +GetByUserName(name) SysUser
    }
    class SysUserRepository {
        +GetByUserName(name) SysUser
    }
    IBaseRepository <|-- ISysUserRepository
    ISysUserRepository <|.. SysUserRepository

聚合根设计

TMom中的聚合根通过RootEntity<T>标识,确保领域模型的完整性和一致性。例如,SysUserSysRole通过SysUserRole关联,形成一个聚合:

classDiagram
    class SysUser {
        +int Id
        +string UserName
        +string Password
    }
    class SysRole {
        +int Id
        +string RoleName
    }
    class SysUserRole {
        +int UserId
        +int RoleId
    }
    SysUser "1" *-- "n" SysUserRole
    SysRole "1" *-- "n" SysUserRole

领域服务与基础设施

领域服务通过TMom.Application.Service项目实现,负责协调多个聚合的操作。基础设施层(如数据库、缓存)通过TMom.Infrastructure项目提供支持。

示例:用户权限校验

public class AuthorizationService
{
    private readonly ISysUserRepository _userRepository;
    private readonly ISysRoleRepository _roleRepository;

    public AuthorizationService(
        ISysUserRepository userRepository,
        ISysRoleRepository roleRepository)
    {
        _userRepository = userRepository;
        _roleRepository = roleRepository;
    }

    public bool HasPermission(int userId, string permission)
    {
        // 实现权限校验逻辑
    }
}

通过以上设计,TMom实现了清晰的职责划分和可扩展的架构,为复杂的生产制造系统提供了坚实的基础。

后端代码生成与扩展性设计

TMom项目基于.NET8、SqlSugar和DDD架构,其核心优势之一在于高效的代码生成机制与灵活的扩展性设计。本节将深入探讨项目中的代码生成工具、扩展点设计以及如何通过这些机制提升开发效率与系统可维护性。

代码生成工具与自动化

TMom项目通过代码生成工具实现了大量重复性工作的自动化,例如实体类、仓储接口和服务层的生成。以下是代码生成的核心流程:

flowchart TD
    A[数据库表结构] --> B[代码生成工具]
    B --> C[生成实体类]
    B --> D[生成仓储接口]
    B --> E[生成服务层]
    C --> F[DDD领域模型]
    D --> G[基础设施层]
    E --> H[应用服务层]

关键代码生成示例

以下是一个通过SqlSugar自动生成实体类的示例代码:

[SugarTable("sys_user")]
public class SysUser : EntityBase
{
    [SugarColumn(ColumnName = "user_name")]
    public string UserName { get; set; }

    [SugarColumn(ColumnName = "password")]
    public string Password { get; set; }
}

通过注解[SugarTable][SugarColumn],SqlSugar能够将数据库表与实体类无缝映射,减少了手动编写ORM代码的工作量。

扩展性设计

TMom项目的扩展性设计主要体现在以下几个方面:

  1. 模块化设计
    项目通过DDD的分层架构,将核心业务逻辑与基础设施分离,便于扩展新功能或替换技术实现。例如,仓储层可以通过实现IBaseRepository接口轻松扩展新的数据访问逻辑。

  2. 依赖注入与AOP
    项目利用.NET8的依赖注入容器和AOP(面向切面编程)机制,实现了横切关注点(如日志、缓存、事务)的动态扩展。以下是AOP的一个示例:

public class LogAspect : AspectBase
{
    public override void OnExecuting(MethodExecutingArgs args)
    {
        LogHelper.Info($"Method {args.Method.Name} is executing.");
    }
}
  1. 插件化架构
    通过TMom.Application.Ext模块,项目支持插件化扩展。开发者可以通过实现IServiceExtSetup接口,动态注册服务或中间件。

扩展点示例

以下是项目中常见的扩展点及其作用:

扩展点 作用描述 示例场景
IBaseRepository 基础数据访问接口 扩展新的数据源(如MongoDB)
IServiceExtSetup 服务注册扩展接口 动态注册第三方服务
AspectBase AOP基类 实现自定义日志或缓存逻辑
IMiddleware 中间件接口 添加请求处理逻辑

代码生成与扩展性的结合

TMom项目通过代码生成工具快速搭建基础架构,再通过扩展性设计满足个性化需求。例如,生成的基础仓储类可以通过继承或组合的方式扩展新功能:

public class CustomUserRepository : BaseRepository<SysUser>, ICustomUserRepository
{
    public CustomUserRepository(IUnitOfWork unitOfWork) : base(unitOfWork) { }

    public List<SysUser> GetActiveUsers()
    {
        return Db.Queryable<SysUser>().Where(u => u.IsActive).ToList();
    }
}

通过这种方式,项目既保证了开发效率,又为未来的功能扩展预留了充足的空间。

TMom后端通过.NET8的高性能特性、SqlSugar的灵活ORM能力与DDD的清晰分层架构,构建了模块化、可扩展的生产制造系统。其动态数据源设计支持多租户场景,代码生成工具大幅提升开发效率,而Redis缓存与AOP优化保障了系统性能。这套技术组合为复杂工业场景提供了可靠、易维护的解决方案。

登录后查看全文
热门项目推荐
相关项目推荐