CSharp: Bridge Pattern

项目结构:

cs 复制代码
/*
 # encoding: utf-8
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:结构型模式 Structural Patterns 桥接模式 Bridge Pattern 演示业务层
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : vs2026 c# .net 10
# os        : windows 10
# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j
# Datetime  : 2026/07/04 22:16
# User      :  geovindu
# Product   : Visual Studio 2026
# Project   : CSharpDesignPattern
# File      : BaseBusinessProcess.cs
 */
 
using BridgePattern.Logging.Abstractions;
using System;
using System.Collections.Generic;
using System.Text;
 
namespace BridgePattern.Bridge.Abstractions
{
    /// <summary>
    /// 桥接模式 - 业务流程顶层抽象基类
    /// 抽象层持有 IBusinessLogger<T>(桥接实现层接口),完成抽象与实现解耦
    ///
    /// 设计特点:
    /// 1. 桥接模式核心:抽象层与实现层通过接口解耦
    /// 2. 模板方法模式:定义统一流程骨架,子类仅实现具体业务逻辑
    /// 3. 泛型绑定:每个业务类独立日志分类
    /// 4. 线程安全:无共享状态,每个实例独立持有日志对象
    ///
    /// 所有珠宝业务流程继承此类,统一封装流程执行、异常捕获、日志埋点
    /// </summary>
    /// <typeparam name="T">业务流程具体类型,用于绑定泛型日志器</typeparam>
    public abstract class BaseBusinessProcess<T> : IBusinessProcess
    {
        /// <summary>
        /// 桥接关联点:日志行为实现对象
        /// 受保护只读,子类仅可调用,不可修改实例
        /// </summary>
        protected readonly IBusinessLogger<T> Logger;
 
        /// <summary>
        /// 当前业务流程名称,子类必须重写返回业务域名称
        /// 如:"原料采购核验"、"设计制图"、"加工生产"等
        /// </summary>
        public abstract string ProcessDomainName { get; }
 
        /// <summary>
        /// 构造注入日志实现层,完成桥接绑定
        /// </summary>
        /// <param name="logger">统一业务日志接口,由DI容器注入</param>
        protected BaseBusinessProcess(IBusinessLogger<T> logger)
        {
            Logger = logger;
        }
 
        /// <summary>
        /// 统一流程执行入口模板方法(模板方法模式+桥接模式组合)
        /// 固定流程骨架:启动日志→执行业务逻辑→完成日志→全局异常捕获
        /// </summary>
        public void ExecuteProcess()
        {
            try
            {
                Logger.Info($"【{ProcessDomainName}】业务流程开始执行");
                ExecuteCoreBusinessLogic();
                Logger.Info($"【{ProcessDomainName}】业务流程执行完毕,无异常");
            }
            catch (Exception ex)
            {
                Logger.Error($"【{ProcessDomainName}】业务流程执行发生阻断异常", ex);
            }
        }
 
        /// <summary>
        /// 子类重写实现专属珠宝业务逻辑
        /// 职责分离:父类控制流程骨架,子类仅编写领域业务代码
        /// </summary>
        protected abstract void ExecuteCoreBusinessLogic();
    }
}
 
 
 
 
/*
 # encoding: utf-8
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:结构型模式 Structural Patterns 桥接模式 Bridge Pattern 演示业务层
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : vs2026 c# .net 10
# os        : windows 10
# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j
# Datetime  : 2026/07/04 22:16
# User      :  geovindu
# Product   : Visual Studio 2026
# Project   : CSharpDesignPattern
# File      : IBusinessProcess.cs
 */
 
using System;
using System.Collections.Generic;
using System.Text;
 
namespace BridgePattern.Bridge.Abstractions
{
    /// <summary>
    /// 业务流程统一接口
    /// 提供非泛型接口,用于调度器统一管理所有业务流程实例
    ///
    /// 设计目的:解决泛型基类 BaseBusinessProcess<T> 无法被调度器统一引用的问题
    /// 所有业务流程类通过继承 BaseBusinessProcess<T> 隐式实现此接口
    /// </summary>
    public interface IBusinessProcess
    {
        /// <summary>
        /// 当前业务流程的领域名称
        /// 如:"原料采购核验"、"设计制图"、"加工生产"等
        /// </summary>
        string ProcessDomainName { get; }
 
        /// <summary>
        /// 执行业务流程的入口方法
        /// 包含统一的流程骨架:启动日志→执行业务逻辑→完成日志→异常捕获
        /// </summary>
        void ExecuteProcess();
    }
}
 
 
 
/*
 # encoding: utf-8
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:结构型模式 Structural Patterns 桥接模式 Bridge Pattern 演示业务层
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : vs2026 c# .net 10
# os        : windows 10
# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j
# Datetime  : 2026/07/04 22:16
# User      :  geovindu
# Product   : Visual Studio 2026
# Project   : CSharpDesignPattern
# File      : ServiceRegister.cs
 */
 
 
using BridgePattern.Bridge.Abstractions;
using BridgePattern.Business.Design;
using BridgePattern.Business.Finance;
using BridgePattern.Business.HumanResource;
using BridgePattern.Business.Marketing;
using BridgePattern.Business.Material;
using BridgePattern.Business.Production;
using BridgePattern.Business.Warehouse;
using BridgePattern.Logging.Abstractions;
using BridgePattern.Logging.Implementations;
using BridgePattern.Logging.Options;
using BridgePattern.Scheduler.Abstractions;
using BridgePattern.Scheduler.Implementations;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Serilog;
using System;
using System.Collections.Generic;
using System.Text;
 
namespace BridgePattern.Core.DI
{
    /// <summary>
    /// 全局DI服务统一注册静态类
    /// 分层注册:日志层→桥接层→业务领域层→调度层,职责单一
    ///
    /// 完全可扩展:新增业务流程、日志实现、调度器仅需追加注册代码
    /// 依赖顺序:严格按照依赖关系顺序注册,确保服务可用
    /// 集中管理:所有服务注册集中在此类,便于维护和审查
    /// </summary>
    public static class ServiceRegister
    {
        /// <summary>
        /// 向服务集合注册系统全部分层服务
        /// 按顺序注册:日志层→桥接层→业务领域层→调度层
        /// </summary>
        /// <param name="services">DI服务容器集合</param>
        /// <returns>注入完成的服务集合,支持链式调用</returns>
        public static IServiceCollection RegisterAllEnterpriseServices(this IServiceCollection services)
        {
            // 1. 注册日志分层模块(最先注册,全系统依赖日志)
            RegisterLoggingServices(services);
 
            // 2. 注册桥接模式日志实现层
            RegisterBridgeLoggerImplementor(services);
 
            // 3. 注册所有珠宝业务领域流程
            RegisterAllBusinessProcess(services);
 
            // 4. 注册流程调度器
            RegisterSchedulerServices(services);
 
            return services;
        }
 
        /// <summary>
        /// 注册日志相关服务:格式化器、文件日志配置、控制台+文件输出
        /// 配置 Serilog 日志框架,集成到微软日志工厂
        /// </summary>
        /// <param name="services">DI服务容器集合</param>
        private static void RegisterLoggingServices(IServiceCollection services)
        {
            // 单例日志格式化器,全局复用,无状态线程安全
            services.AddSingleton<CustomFileFormatter>();
 
            // 日志配置实体单例,封装全部日志配置参数
            services.AddSingleton<JewelFileLogOptions>();
 
            // 使用Serilog配置日志:创建全局日志记录器
            var logOptions = new JewelFileLogOptions();
            Log.Logger = logOptions.ConfigureSerilog().CreateLogger();
 
            // 配置微软日志工厂:清除默认提供器,使用Serilog
            services.AddLogging(logBuilder =>
            {
                logBuilder.ClearProviders();
                logBuilder.AddSerilog(dispose: true);
            });
        }
 
        /// <summary>
        /// 注册桥接模式日志实现器:IBusinessLogger<T> → StandardBusinessLogger<T>
        /// 泛型瞬时注入,每个业务类独立日志分类,支持DI自动解析泛型参数
        /// </summary>
        /// <param name="services">DI服务容器集合</param>
        private static void RegisterBridgeLoggerImplementor(IServiceCollection services)
        {
            services.AddTransient(typeof(IBusinessLogger<>), typeof(StandardBusinessLogger<>));
        }
 
        /// <summary>
        /// 注册全部分层珠宝业务流程(瞬时生命周期,每次调用新建实例)
        /// 按领域分类注册:原料域→设计域→生产加工域→仓储物流域→财务域→营销销售域→人事行政域
        /// </summary>
        /// <param name="services">DI服务容器集合</param>
        private static void RegisterAllBusinessProcess(IServiceCollection services)
        {
            // 原料域
            services.AddTransient<IBusinessProcess, RawMaterialPurchaseProcess>();
             
            // 设计域
            services.AddTransient<IBusinessProcess, DesignDraftProcess>();
             
            // 生产加工域
            services.AddTransient<IBusinessProcess, ManufactureProcess>();
            services.AddTransient<IBusinessProcess, QualityInspectProcess>();
             
            // 仓储包装物流域
            services.AddTransient<IBusinessProcess, PackageProcess>();
            services.AddTransient<IBusinessProcess, LogisticsProcess>();
             
            // 财务域
            services.AddTransient<IBusinessProcess, FinanceProcess>();
             
            // 营销销售域
            services.AddTransient<IBusinessProcess, MarketingProcess>();
            services.AddTransient<IBusinessProcess, SalesBusinessProcess>();
             
            // 人事行政域
            services.AddTransient<IBusinessProcess, HRAdminProcess>();
        }
 
        /// <summary>
        /// 注册业务调度器抽象与实现
        /// 调度器依赖注入所有 IBusinessProcess 实现,统一管理业务流程执行
        /// </summary>
        /// <param name="services">DI服务容器集合</param>
        private static void RegisterSchedulerServices(IServiceCollection services)
        {
            services.AddTransient<IBusinessScheduler, ConcurrentBusinessScheduler>();
        }
    }
}
 
 
 
/*
 # encoding: utf-8
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:结构型模式 Structural Patterns 桥接模式 Bridge Pattern 演示业务层
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : vs2026 c# .net 10
# os        : windows 10
# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j
# Datetime  : 2026/07/04 22:16
# User      :  geovindu
# Product   : Visual Studio 2026
# Project   : CSharpDesignPattern
# File      : GlobalConstants.cs
 */
 
using System;
using System.Collections.Generic;
using System.Text;
 
namespace BridgePattern.Core.Global
{
    /// <summary>
    /// 系统全局静态常量类
    /// 统一管理日志路径、文件夹模板、日志文件名模板,便于统一修改扩展
    /// 职责单一:仅存放全局固定常量,无业务逻辑
    /// </summary>
    public static class GlobalConstants
    {
        /// <summary>
        /// 日志根目录名称
        /// </summary>
        public const string LogRootDirectory = "Logs";
 
        /// <summary>
        /// 日志日期文件夹格式化模板 yyyy-MM-dd
        /// </summary>
        public const string LogDateFolderFormat = "{Date:yyyy-MM-dd}";
 
        /// <summary>
        /// 分级日志文件模板,按日志等级拆分独立文件
        /// </summary>
        public const string LogFileNameFormat = "app-{Level}.log";
 
        /// <summary>
        /// 日志文件自动保留天数,超出自动清理
        /// </summary>
        public const int LogRetainDays = 30;
 
        /// <summary>
        /// 高并发日志后台队列缓冲大小,缓解IO阻塞
        /// </summary>
        public const int LogBackgroundQueueCapacity = 10000;
    }
}
 
 
 
/*
 # encoding: utf-8
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:结构型模式 Structural Patterns 桥接模式 Bridge Pattern 演示业务层
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : vs2026 c# .net 10
# os        : windows 10
# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j
# Datetime  : 2026/07/04 22:16
# User      :  geovindu
# Product   : Visual Studio 2026
# Project   : CSharpDesignPattern
# File      : IBusinessLogger.cs
 */
 
 
using System;
using System.Collections.Generic;
using System.Text;
 
namespace BridgePattern.Logging.Abstractions
{
    /// <summary>
    /// 桥接模式 - 日志实现层顶层接口
    /// 定义所有业务流程统一日志输出行为契约
    ///
    /// 职责单一:仅定义日志输出方法,不包含任何实现逻辑
    /// 扩展友好:新增日志输出渠道(数据库、ES、第三方日志服务)仅需新增实现类
    /// 解耦设计:与业务流程抽象层完全解耦,各自独立变化
    /// </summary>
    /// <typeparam name="T">绑定的业务模块类型,用于日志分类和SourceContext</typeparam>
    public interface IBusinessLogger<out T>
    {
        /// <summary>
        /// 调试级日志:开发调试信息、内部流程细节、详细追踪数据
        /// </summary>
        /// <param name="message">日志文本内容</param>
        void Debug(string message);
 
        /// <summary>
        /// 信息级日志:正常业务流转记录、流程节点完成、状态变更通知
        /// </summary>
        /// <param name="message">日志文本内容</param>
        void Info(string message);
 
        /// <summary>
        /// 警告级日志:业务风险提示、库存不足预警、参数偏差等非阻断性问题
        /// </summary>
        /// <param name="message">日志文本内容</param>
        void Warn(string message);
 
        /// <summary>
        /// 错误级日志:业务阻断异常、流程失败、数据校验失败等严重问题
        /// </summary>
        /// <param name="message">错误描述文本</param>
        /// <param name="exception">异常对象,可选参数,包含完整堆栈信息</param>
        void Error(string message, Exception? exception = null);
    }
}
 
 
 
/*
 # encoding: utf-8
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:结构型模式 Structural Patterns 桥接模式 Bridge Pattern 演示业务层
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : vs2026 c# .net 10
# os        : windows 10
# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j
# Datetime  : 2026/07/04 22:16
# User      :  geovindu
# Product   : Visual Studio 2026
# Project   : CSharpDesignPattern
# File      : CustomFileFormatter.cs
 */
 
using Serilog.Events;
using Serilog.Formatting;
using System;
using System.IO;
using System.Text;
 
namespace BridgePattern.Logging.Implementations
{
    /// <summary>
    /// 自定义日志文本格式化器
    /// 实现 Serilog ITextFormatter 接口,保证控制台输出与文件日志输出格式100%完全统一
    ///
    /// 线程安全:每次写入新建 StringBuilder,无共享状态
    /// 格式规范:时间戳 | 线程ID | 日志等级 | SourceContext | 日志消息 | 异常堆栈
    /// </summary>
    public sealed class CustomFileFormatter : ITextFormatter
    {
        /// <summary>
        /// 格式化日志事件为文本输出
        /// </summary>
        /// <param name="logEvent">Serilog日志事件对象,包含时间戳、等级、消息、异常等信息</param>
        /// <param name="output">文本写入器,用于输出格式化后的日志文本</param>
        public void Format(LogEvent logEvent, TextWriter output)
        {
            StringBuilder sb = new StringBuilder();
             
            // 1. 日志时间戳(精确到毫秒)
            sb.Append(logEvent.Timestamp.ToString("yyyy-MM-dd HH:mm:ss.fff"));
            sb.Append(" | ");
             
            // 2. 当前执行线程ID,用于排查多线程并发问题
            sb.Append($"Thread:{Environment.CurrentManagedThreadId,5}");
            sb.Append(" | ");
             
            // 3. 日志等级固定宽度对齐
            sb.Append($"{logEvent.Level,6}");
            sb.Append(" | ");
             
            // 4. 业务模块分类(泛型ILogger<T>的类名,即SourceContext)
            if (logEvent.Properties.TryGetValue("SourceContext", out var context))
            {
                sb.Append($"{context.ToString().Trim('\"'),-40}");
            }
            else
            {
                sb.Append($"{string.Empty,-40}");
            }
             
            sb.Append(" | ");
             
            // 5. 业务日志消息
            sb.Append(logEvent.RenderMessage());
 
            // 6. 存在异常时追加完整堆栈信息
            if (logEvent.Exception != null)
            {
                sb.AppendLine();
                sb.Append("【异常堆栈信息】");
                sb.AppendLine(logEvent.Exception.ToString());
            }
 
            output.WriteLine(sb.ToString());
        }
    }
}
 
 
/*
 # encoding: utf-8
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:结构型模式 Structural Patterns 桥接模式 Bridge Pattern 演示业务层
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : vs2026 c# .net 10
# os        : windows 10
# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j
# Datetime  : 2026/07/04 22:16
# User      :  geovindu
# Product   : Visual Studio 2026
# Project   : CSharpDesignPattern
# File      : StandardBusinessLogger.cs
 */
 
using BridgePattern.Logging.Abstractions;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Text;
 
namespace BridgePattern.Logging.Implementations
{
    /// <summary>
    /// IBusinessLogger<T> 标准实现类
    /// 桥接模式具体实现者:封装微软标准 ILogger<T>,同时输出控制台+分级日期文件日志
    ///
    /// 线程安全:依赖 ILogger<T> 框架原生线程安全特性,无共享可变字段
    /// 泛型绑定:每个业务类独立日志分类,日志文件自动区分模块
    /// 统一接口:实现 IBusinessLogger<T> 契约,与业务流程抽象层解耦
    /// </summary>
    /// <typeparam name="T">绑定的业务模块类型,用于日志分类和SourceContext</typeparam>
    public sealed class StandardBusinessLogger<T> : IBusinessLogger<T>
    {
        /// <summary>
        /// 微软原生泛型日志器,提供实际日志输出能力
        /// </summary>
        private readonly ILogger<T> _frameworkLogger;
 
        /// <summary>
        /// 构造函数:依赖注入微软标准日志器
        /// </summary>
        /// <param name="frameworkLogger">微软原生泛型日志器,由DI容器注入</param>
        public StandardBusinessLogger(ILogger<T> frameworkLogger)
        {
            _frameworkLogger = frameworkLogger;
        }
 
        /// <summary>
        /// 输出调试级日志
        /// </summary>
        /// <param name="message">日志文本内容</param>
        public void Debug(string message)
        {
            _frameworkLogger.LogDebug(message);
        }
 
        /// <summary>
        /// 输出信息级日志
        /// </summary>
        /// <param name="message">日志文本内容</param>
        public void Info(string message)
        {
            _frameworkLogger.LogInformation(message);
        }
 
        /// <summary>
        /// 输出警告级日志
        /// </summary>
        /// <param name="message">日志文本内容</param>
        public void Warn(string message)
        {
            _frameworkLogger.LogWarning(message);
        }
 
        /// <summary>
        /// 输出错误级日志
        /// </summary>
        /// <param name="message">错误描述文本</param>
        /// <param name="exception">异常对象,可选参数</param>
        public void Error(string message, Exception? exception = null)
        {
            if (exception is null)
                _frameworkLogger.LogError(message);
            else
                _frameworkLogger.LogError(exception, message);
        }
    }
}
 
 
/*
 # encoding: utf-8
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:结构型模式 Structural Patterns 桥接模式 Bridge Pattern 演示业务层
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : vs2026 c# .net 10
# os        : windows 10
# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j
# Datetime  : 2026/07/04 22:16
# User      :  geovindu
# Product   : Visual Studio 2026
# Project   : CSharpDesignPattern
# File      : JewelFileLogOptions.cs
 */
 
 
using BridgePattern.Core.Global;
using BridgePattern.Logging.Implementations;
using Serilog;
using Serilog.Core;
using Serilog.Events;
using Serilog.Formatting;
using System;
using System.IO;
 
namespace BridgePattern.Logging.Options
{
    /// <summary>
    /// 珠宝系统文件日志配置实体
    /// 封装 Serilog 日志全部配置项,统一注入DI配置
    ///
    /// 职责单一:承载日志配置参数,解耦硬编码常量
    /// 集中管理:日志路径、保留天数、格式化器等配置集中管理
    /// 可扩展:新增日志输出渠道仅需修改此配置类
    /// </summary>
    public sealed class JewelFileLogOptions
    {
        /// <summary>
        /// 日志根目录路径
        /// 组合当前工作目录与全局常量配置的日志文件夹名称
        /// </summary>
        public string LogRootPath => Path.Combine(Directory.GetCurrentDirectory(), GlobalConstants.LogRootDirectory);
         
        /// <summary>
        /// 日志文本格式化器实例
        /// 使用自定义格式化器,保证控制台与文件日志格式统一
        /// </summary>
        public ITextFormatter Formatter => new CustomFileFormatter();
         
        /// <summary>
        /// 日志文件保留数量限制
        /// 对应全局常量配置的保留天数
        /// </summary>
        public int RetainedFileCountLimit => GlobalConstants.LogRetainDays;
         
        /// <summary>
        /// 日志等级开关,用于动态调整日志级别
        /// 默认最低级别为 Debug,输出所有日志
        /// </summary>
        public LoggingLevelSwitch LevelSwitch => new LoggingLevelSwitch(LogEventLevel.Debug);
         
        /// <summary>
        /// 配置 Serilog 日志记录器
        /// 创建完整的日志配置:控制台输出 + 文件输出 + 等级过滤 + 格式化
        /// </summary>
        /// <returns>Serilog LoggerConfiguration 实例,用于创建最终日志记录器</returns>
        public LoggerConfiguration ConfigureSerilog()
        {
            // 确保日志目录存在
            Directory.CreateDirectory(LogRootPath);
             
            return new LoggerConfiguration()
                // 设置全局最低日志级别,由等级开关控制
                .MinimumLevel.ControlledBy(LevelSwitch)
                // 过滤 Microsoft 组件日志,仅输出 Warning 及以上级别
                .MinimumLevel.Override("Microsoft", LogEventLevel.Warning)
                // 过滤 System 组件日志,仅输出 Warning 及以上级别
                .MinimumLevel.Override("System", LogEventLevel.Warning)
                // 启用日志上下文,支持结构化日志
                .Enrich.FromLogContext()
                // 控制台输出,使用自定义格式化器
                .WriteTo.Console(formatter: Formatter)
                // 文件输出配置
                .WriteTo.File(
                    formatter: Formatter,                    // 使用自定义格式化器
                    path: Path.Combine(LogRootPath, "app-.log"),  // 日志文件路径模板
                    rollingInterval: RollingInterval.Day,     // 按日期滚动
                    retainedFileCountLimit: RetainedFileCountLimit,  // 保留文件数量
                    rollOnFileSizeLimit: true);              // 超出大小自动滚动
        }
    }
}
 
 
/*
 # encoding: utf-8
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:结构型模式 Structural Patterns 桥接模式 Bridge Pattern 演示业务层
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : vs2026 c# .net 10
# os        : windows 10
# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j
# Datetime  : 2026/07/04 22:16
# User      :  geovindu
# Product   : Visual Studio 2026
# Project   : CSharpDesignPattern
# File      : IBusinessScheduler.cs
 */
 
 
using BridgePattern.Bridge.Abstractions;
using System;
using System.Collections.Generic;
using System.Text;
 
namespace BridgePattern.Scheduler.Abstractions
{
    /// <summary>
    /// 业务调度器顶层接口
    /// 职责单一:定义全业务流程调度行为契约,支持串行/并发执行
    ///
    /// 可扩展:未来新增定时调度、分片调度仅需新增实现类
    /// 解耦设计:与具体调度实现解耦,业务代码无需关心调度方式
    /// </summary>
    public interface IBusinessScheduler
    {
        /// <summary>
        /// 串行顺序执行全部业务流程
        /// 按照注册顺序依次执行,适用于有依赖关系的业务流程
        /// </summary>
        void RunAllProcessSerial();
 
        /// <summary>
        /// 多线程并发并行执行全部业务流程
        /// 使用 Parallel.ForEach 实现,测试高并发日志写入安全性
        /// 适用于无依赖关系、可并行执行的业务流程
        /// </summary>
        void RunAllProcessConcurrent();
 
        /// <summary>
        /// 获取系统全部注册业务流程集合
        /// </summary>
        /// <returns>所有业务流程实例的枚举集合</returns>
        IEnumerable<IBusinessProcess> GetAllBusinessProcesses();
    }
}
 
 
/*
 # encoding: utf-8
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:结构型模式 Structural Patterns 桥接模式 Bridge Pattern 演示业务层
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : vs2026 c# .net 10
# os        : windows 10
# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j
# Datetime  : 2026/07/04 22:16
# User      :  geovindu
# Product   : Visual Studio 2026
# Project   : CSharpDesignPattern
# File      : ConcurrentBusinessScheduler.cs
 */
 
using BridgePattern.Bridge.Abstractions;
using BridgePattern.Scheduler.Abstractions;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
 
namespace BridgePattern.Scheduler.Implementations
{
    /// <summary>
    /// 高并发业务流程调度器实现
    /// 支持串行、多线程并行两种执行模式,内置独立调度日志
    ///
    /// 线程安全:DI瞬时注入,每次调用新建实例,无共享可变状态
    /// 高并发优化:Parallel.ForEach框架托管线程池,自动控制并发数
    /// 日志缓冲:利用Serilog后台队列缓冲IO,避免阻塞业务线程
    /// </summary>
    public sealed class ConcurrentBusinessScheduler : IBusinessScheduler
    {
        /// <summary>
        /// 调度器专属框架日志器,用于记录调度器自身运行状态
        /// </summary>
        private readonly ILogger<ConcurrentBusinessScheduler> _schedulerLogger;
 
        /// <summary>
        /// 全部业务流程实例集合,由DI容器自动注入所有注册的IBusinessProcess实现
        /// </summary>
        private readonly IEnumerable<IBusinessProcess> _allBusinessProcessList;
 
        /// <summary>
        /// 构造函数:依赖注入调度器专属日志和全部业务流程实例
        /// </summary>
        /// <param name="schedulerLogger">调度器分类日志,由DI容器注入</param>
        /// <param name="processList">所有珠宝业务流程实例集合,由DI容器自动聚合</param>
        public ConcurrentBusinessScheduler(ILogger<ConcurrentBusinessScheduler> schedulerLogger, IEnumerable<IBusinessProcess> processList)
        {
            _schedulerLogger = schedulerLogger;
            _allBusinessProcessList = processList;
        }
 
        /// <summary>
        /// 获取系统全部注册业务流程集合
        /// </summary>
        /// <returns>所有业务流程实例的枚举集合</returns>
        public IEnumerable<IBusinessProcess> GetAllBusinessProcesses()
        {
            return _allBusinessProcessList;
        }
 
        /// <summary>
        /// 串行顺序执行全部业务流程
        /// 按照注册顺序依次执行每个业务流程,适用于有依赖关系的场景
        /// </summary>
        public void RunAllProcessSerial()
        {
            _schedulerLogger.LogInformation("=====【调度器】串行执行全业务流程任务启动 =====");
            foreach (var process in _allBusinessProcessList)
            {
                process.ExecuteProcess();
            }
            _schedulerLogger.LogInformation("=====【调度器】串行执行全业务流程全部完成 =====");
        }
 
        /// <summary>
        /// 多线程并发并行执行全部业务流程
        /// 使用 Parallel.ForEach 实现,框架内置线程池自动控制并发数
        /// 适用于无依赖关系、可并行执行的业务流程,测试高并发日志写入安全性
        /// </summary>
        public void RunAllProcessConcurrent()
        {
            _schedulerLogger.LogInformation("=====【调度器】多线程并发执行全业务流程任务启动 =====");
            // 框架内置线程池,自动控制并发数,避免线程爆炸
            Parallel.ForEach(_allBusinessProcessList, businessProcess =>
            {
                businessProcess.ExecuteProcess();
            });
            _schedulerLogger.LogInformation("=====【调度器】多线程并发执行全业务流程全部完成 =====");
        }
    }
}
cs 复制代码
/*
 # encoding: utf-8
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:结构型模式 Structural Patterns 桥接模式 Bridge Pattern 演示业务层
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : vs2026 c# .net 10
# os        : windows 10
# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j
# Datetime  : 2026/07/04 22:16
# User      :  geovindu
# Product   : Visual Studio 2026
# Project   : CSharpDesignPattern
# File      : DesignDraftProcess.cs
 */
 
 
using BridgePattern.Bridge.Abstractions;
using BridgePattern.Logging.Abstractions;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Text;
 
namespace BridgePattern.Business.Design
{
    /// <summary>
    /// 设计域:珠宝二维制图、3D建模、设计稿审核流程
    /// </summary>
    public sealed class DesignDraftProcess : BaseBusinessProcess<DesignDraftProcess>
    {
        public override string ProcessDomainName => "设计制图";
 
        public DesignDraftProcess(IBusinessLogger<DesignDraftProcess> logger) : base(logger)
        {
        }
 
        protected override void ExecuteCoreBusinessLogic()
        {
            Logger.Debug("1. 接收门店客户定制需求、新品开发需求单");
            Logger.Info("2. 设计师绘制二维效果图,完成珠宝3D建模文件");
            Logger.Info("3. 设计图纸提交设计主管审核尺寸、工艺可行性");
            Logger.Warn("多款钻戒建模戒托尺寸存在偏差,需重新调整建模参数");
        }
    }
}
 
 
/*
 # encoding: utf-8
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:结构型模式 Structural Patterns 桥接模式 Bridge Pattern 演示业务层
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : vs2026 c# .net 10
# os        : windows 10
# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j
# Datetime  : 2026/07/04 22:16
# User      :  geovindu
# Product   : Visual Studio 2026
# Project   : CSharpDesignPattern
# File      : FinanceProcess.cs
 */
 
 
using BridgePattern.Bridge.Abstractions;
using BridgePattern.Logging.Abstractions;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Text;
 
namespace BridgePattern.Business.Finance
{
 
    /// <summary>
    /// 财务域:成本核算、供应商对账、门店营收回款核销流程
    /// </summary>
    public sealed class FinanceProcess : BaseBusinessProcess<FinanceProcess>
    {
        public override string ProcessDomainName => "财务结算";
 
        public FinanceProcess(IBusinessLogger<FinanceProcess> logger) : base(logger)
        {
        }
 
        protected override void ExecuteCoreBusinessLogic()
        {
            Logger.Info("1. 核算原料采购成本、车间人工加工成本、门店月度营收");
            Logger.Debug("2. 供应商货款对账、渠道客户回款核销、财务凭证归档");
        }
    }
}
 
 
 
/*
 # encoding: utf-8
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:结构型模式 Structural Patterns 桥接模式 Bridge Pattern 演示业务层
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : vs2026 c# .net 10
# os        : windows 10
# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j
# Datetime  : 2026/07/04 22:16
# User      :  geovindu
# Product   : Visual Studio 2026
# Project   : CSharpDesignPattern
# File      : HRAdminProcess.cs
 */
 
using BridgePattern.Bridge.Abstractions;
using BridgePattern.Logging.Abstractions;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Text;
 
namespace BridgePattern.Business.HumanResource
{
    /// <summary>
    /// 人事行政域:员工考勤、招聘调配、门店耗材行政采购流程
    /// </summary>
    public sealed class HRAdminProcess : BaseBusinessProcess<HRAdminProcess>
    {
        public override string ProcessDomainName => "人事行政";
 
        public HRAdminProcess(IBusinessLogger<HRAdminProcess> logger) : base(logger)
        {
        }
 
        protected override void ExecuteCoreBusinessLogic()
        {
            Logger.Info("1. 全门店员工考勤核算、设计师/销售岗招聘面试、人员跨店调配");
            Logger.Debug("2. 门店包装耗材、办公文具统一采购入库管理");
        }
    }
}
 
 
/*
 # encoding: utf-8
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:结构型模式 Structural Patterns 桥接模式 Bridge Pattern 演示业务层
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : vs2026 c# .net 10
# os        : windows 10
# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j
# Datetime  : 2026/07/04 22:16
# User      :  geovindu
# Product   : Visual Studio 2026
# Project   : CSharpDesignPattern
# File      : MarketingProcess.cs
 */
 
 
using BridgePattern.Bridge.Abstractions;
using BridgePattern.Logging.Abstractions;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Text;
 
namespace BridgePattern.Business.Marketing
{
    /// <summary>
    /// 营销域:线上短视频投放、线下门店促销、新品活动策划流程
    /// </summary>
    public sealed class MarketingProcess : BaseBusinessProcess<MarketingProcess>
    {
        public override string ProcessDomainName => "营销推广";
 
        public MarketingProcess(IBusinessLogger<MarketingProcess> logger) : base(logger)
        {
        }
 
        protected override void ExecuteCoreBusinessLogic()
        {
            Logger.Info("1. 月度新品营销活动策划、短视频投放、门店满减促销配置");
            Logger.Debug("2. 统计各渠道客流、曝光量、成交转化订单数据");
        }
    }
}
 
 
/*
 # encoding: utf-8
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:结构型模式 Structural Patterns 桥接模式 Bridge Pattern 演示业务层
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : vs2026 c# .net 10
# os        : windows 10
# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j
# Datetime  : 2026/07/04 22:16
# User      :  geovindu
# Product   : Visual Studio 2026
# Project   : CSharpDesignPattern
# File      : SalesBusinessProcess.cs
 */
 
 
using BridgePattern.Bridge.Abstractions;
using BridgePattern.Logging.Abstractions;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Text;
 
namespace BridgePattern.Business.Marketing
{
    /// <summary>
    /// 营销域:门店客户接待、定制下单、收银开单、会员积分流程
    /// </summary>
    public sealed class SalesBusinessProcess : BaseBusinessProcess<SalesBusinessProcess>
    {
        public override string ProcessDomainName => "门店业务";
 
        public SalesBusinessProcess(IBusinessLogger<SalesBusinessProcess> logger) : base(logger)
        {
        }
 
        protected override void ExecuteCoreBusinessLogic()
        {
            Logger.Info("1. 门店客户接待、款式推荐、私人定制需求信息登记");
            Logger.Debug("2. 销售开单收银、会员消费积分自动累计、客户档案更新");
        }
    }
}
 
 
/*
 # encoding: utf-8
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:结构型模式 Structural Patterns 桥接模式 Bridge Pattern 演示业务层
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : vs2026 c# .net 10
# os        : windows 10
# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j
# Datetime  : 2026/07/04 22:16
# User      :  geovindu
# Product   : Visual Studio 2026
# Project   : CSharpDesignPattern
# File      : RawMaterialPurchaseProcess.cs
 */
 
 
using BridgePattern.Bridge.Abstractions;
using BridgePattern.Logging.Abstractions;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Text;
 
namespace BridgePattern.Business.Material
{
    /// <summary>
    /// 原料域:原料采购、原料纯度核验、入库流程
    /// 职责单一:仅处理贵金属、宝石原料入库校验业务
    /// </summary>
    public sealed class RawMaterialPurchaseProcess : BaseBusinessProcess<RawMaterialPurchaseProcess>
    {
        public override string ProcessDomainName => "原料采购核验";
 
        public RawMaterialPurchaseProcess(IBusinessLogger<RawMaterialPurchaseProcess> logger) : base(logger)
        {
        }
 
        protected override void ExecuteCoreBusinessLogic()
        {
            Logger.Debug("1. 接收供应商黄金、钻石、铂金原料送货单据");
            Logger.Info("2. 质检人员核对原料重量、纯度鉴定证书、宝石4C参数");
            Logger.Info("3. 不合格原料登记台账,发起退货流程");
            Logger.Debug("4. 校验合格原料录入原料库存系统,更新库存台账");
            Logger.Warn("铂金原料当前库存低于安全预警阈值,需触发采购申请");
        }
    }
}
 
 
/*
 # encoding: utf-8
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:结构型模式 Structural Patterns 桥接模式 Bridge Pattern 演示业务层
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : vs2026 c# .net 10
# os        : windows 10
# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j
# Datetime  : 2026/07/04 22:16
# User      :  geovindu
# Product   : Visual Studio 2026
# Project   : CSharpDesignPattern
# File      : ManufactureProcess.cs
 */
 
 
using BridgePattern.Bridge.Abstractions;
using BridgePattern.Logging.Abstractions;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Text;
 
namespace BridgePattern.Business.Production
{
    /// <summary>
    /// 生产域:工厂熔金、倒模、执模、镶石、抛光加工流程
    /// </summary>
    public sealed class ManufactureProcess : BaseBusinessProcess<ManufactureProcess>
    {
        public override string ProcessDomainName => "加工生产";
 
        public ManufactureProcess(IBusinessLogger<ManufactureProcess> logger) : base(logger)
        {
        }
 
        protected override void ExecuteCoreBusinessLogic()
        {
            Logger.Debug("1. 车间领取合格原料与审核通过的3D设计图纸");
            Logger.Info("2. 依次执行熔金、倒模、执模、镶石、抛光全工序");
            Logger.Warn("批量项链抛光工序表面划痕超标,转入返工生产线");
        }
    }
}
 
 
/*
 # encoding: utf-8
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:结构型模式 Structural Patterns 桥接模式 Bridge Pattern 演示业务层
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : vs2026 c# .net 10
# os        : windows 10
# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j
# Datetime  : 2026/07/04 22:16
# User      :  geovindu
# Product   : Visual Studio 2026
# Project   : CSharpDesignPattern
# File      : QualityInspectProcess.cs
 */
 
 
using BridgePattern.Bridge.Abstractions;
using BridgePattern.Logging.Abstractions;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Text;
 
namespace BridgePattern.Business.Production
{
    /// <summary>
    /// 生产域:成品出厂质量检测、宝石牢固度、印记合规校验
    /// </summary>
    public sealed class QualityInspectProcess : BaseBusinessProcess<QualityInspectProcess>
    {
        public override string ProcessDomainName => "成品质检";
 
        public QualityInspectProcess(IBusinessLogger<QualityInspectProcess> logger) : base(logger)
        {
        }
 
        protected override void ExecuteCoreBusinessLogic()
        {
            Logger.Info("1. 检测成品重量、宝石镶嵌牢固度、表面瑕疵、贵金属印记");
            Logger.Debug("2. 合格产品出具国检鉴定证书,绑定商品唯一编码");
            Logger.Error("检测发现1件钻戒主石松动,禁止流入包装环节,强制返工");
        }
    }
}
 
 
/*
 # encoding: utf-8
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:结构型模式 Structural Patterns 桥接模式 Bridge Pattern 演示业务层
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : vs2026 c# .net 10
# os        : windows 10
# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j
# Datetime  : 2026/07/04 22:16
# User      :  geovindu
# Product   : Visual Studio 2026
# Project   : CSharpDesignPattern
# File      : LogisticsProcess.cs
 */
 
 
using BridgePattern.Bridge.Abstractions;
using BridgePattern.Logging.Abstractions;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Text;
 
namespace BridgePattern.Business.Warehouse
{
    /// <summary>
    /// 仓储域:保价贵金属物流、门店配货、物流单号同步流程
    /// </summary>
    public sealed class LogisticsProcess : BaseBusinessProcess<LogisticsProcess>
    {
        public override string ProcessDomainName => "物流配送";
 
        public LogisticsProcess(IBusinessLogger<LogisticsProcess> logger) : base(logger)
        {
        }
 
        protected override void ExecuteCoreBusinessLogic()
        {
            Logger.Info("1. 成品走贵金属保价专线物流,封装防拆安全包装");
            Logger.Debug("2. 物流单号同步推送至各门店销售管理系统");
            Logger.Warn("跨省物流干线延迟,已同步通知对应门店销售顾问");
        }
    }
}
 
 
/*
 # encoding: utf-8
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:结构型模式 Structural Patterns 桥接模式 Bridge Pattern 演示业务层
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : vs2026 c# .net 10
# os        : windows 10
# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j
# Datetime  : 2026/07/04 22:16
# User      :  geovindu
# Product   : Visual Studio 2026
# Project   : CSharpDesignPattern
# File      : PackageProcess.cs
 */
 
 
using BridgePattern.Bridge.Abstractions;
using BridgePattern.Logging.Abstractions;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Text;
 
namespace BridgePattern.Business.Warehouse
{
    /// <summary>
    /// 仓储域:成品礼盒封装、证书配套、溯源条码粘贴流程
    /// </summary>
    public sealed class PackageProcess : BaseBusinessProcess<PackageProcess>
    {
        public override string ProcessDomainName => "产品包装";
 
        public PackageProcess(IBusinessLogger<PackageProcess> logger) : base(logger)
        {
        }
 
        protected override void ExecuteCoreBusinessLogic()
        {
            Logger.Info("1. 质检合格成品搭配礼盒、保养手册、鉴定证书封装");
            Logger.Debug("2. 粘贴商品全局唯一溯源二维码,绑定库存系统");
        }
    }
}

调用:

cs 复制代码
/*
 # encoding: utf-8
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:结构型模式 Structural Patterns 桥接模式 Bridge Pattern 演示业务层
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : vs2026 c# .net 10
# os        : windows 10
# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j
# Datetime  : 2026/07/04 22:16
# User      :  geovindu
# Product   : Visual Studio 2026
# Project   : CSharpDesignPattern
# File      : BridgeBll.cs
 */
 
 
using BridgePattern;
using BridgePattern.Core.DI;
using BridgePattern.Scheduler;
using BridgePattern.Scheduler.Abstractions;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Text;
 
 
namespace BLL
{
 
    public class BridgeBll
    {
        public void Demo()
        {
             
             // 1. 初始化DI容器,分层注册全部系统服务
            ServiceCollection serviceCollection = new ServiceCollection();
            serviceCollection.RegisterAllEnterpriseServices();
            IServiceProvider serviceProvider = serviceCollection.BuildServiceProvider();
 
            // 全局根日志器,记录系统启动、全局异常
            ILogger<BridgeBll> rootLogger = serviceProvider.GetRequiredService<ILogger<BridgeBll>>();
 
            try
            {
                rootLogger.LogInformation("==================== 珠宝行业桥接模式企业系统启动 ====================");
 
                // 2. 获取业务调度器
                IBusinessScheduler scheduler = serviceProvider.GetRequiredService<IBusinessScheduler>();
 
                // 方式1:串行顺序执行所有业务流程
                scheduler.RunAllProcessSerial();
 
                // 方式2:并发多线程执行,验证高并发日志线程安全
                // scheduler.RunAllProcessConcurrent();
 
                rootLogger.LogInformation("==================== 全部业务流程执行完成,系统正常退出 ====================");
            }
            catch (Exception globalEx)
            {
                rootLogger.LogError(globalEx, "系统顶层全局捕获致命异常,程序终止运行");
            }
 
            Console.WriteLine();
            Console.WriteLine("程序执行完毕,日志存储目录:Logs/yyyy-MM-dd/ 分级日志文件");
            Console.WriteLine("按任意键关闭窗口");
            Console.ReadKey();
        
       
        }
    }
}

输出:

相关推荐
霸道流氓气质1 小时前
SpringBoot中设计模式组合使用示例-策略、模板、观察者、门面、工厂、单例。
spring boot·后端·设计模式
货拉拉技术1 小时前
复杂业务规则太多?我们搭了一个规则可视化配置平台
后端
এ慕ོ冬℘゜1 小时前
深入 JavaScript BOM:掌握 window 对象的窗口控制魔法
开发语言·javascript·ecmascript
2501_941982051 小时前
企业微信二次开发:如何用 Python 搭建通用的 Webhook 实时消息接收
开发语言·python·企业微信
爱勇宝2 小时前
AI 都能写代码了,还要学计算机吗?
前端·后端·程序员
cfm_29142 小时前
Spring监听器
java·spring boot·后端
逝水无殇2 小时前
C# 特性详解
开发语言·后端·c#
cfm_29142 小时前
SpringBoot 数据库全栈整合
数据库·spring boot·后端
xn71332 小时前
别再把 MCP Roots 当安全沙箱:一个符号链接就能逃逸目录
人工智能·后端·mcp