项目结构:

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();
}
}
}
输出:
