CSharp: Factory Method Pattern using .Net 10 项目结构展示了一个基于工厂方法模式的珠宝企业业务系统实现。系统采用C#语言开发包含以下核心组件工厂模式抽象层定义了JewelryBusinessFactory基类和IJewelryBusinessProcess接口业务实现层12个具体业务流程类如原料采购、设计制图、生产加工等并发调度器ProcessConcurrentScheduler支持同步/异步并行执行日志系统使用Microsoft.Extensions.Logging实现多级别日志记录线程安全通过ReaderWriterLockSlim确保并发安全系统特点采用工厂方法模式解耦业务创建与执行支持高并发处理默认最大并发数12完善的日志跟踪包含TraceId链路追踪异常处理机制同步/异步两种执行模式调用示例展示了如何注册所有业务工厂并执行同步/异步并发处理输出各业务环节的执行日志。/* # encoding: utf-8 # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看言語成了邀功盡責的功臣還需要行爲每日來值班嗎 # 描述 Factory Method 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 : LogScopeHelper.cs */ using Microsoft.Extensions.Logging; using System; using System.Collections.Generic; using System.Text; namespace FactoryMethodPattern.Infrastructure.Logging { /// summary /// /// /summary public static class LogScopeHelper { /// summary /// 绑定链路TraceId、业务模块到日志Scope /// /summary public static IDisposable CreateBusinessScope(this ILogger logger, string traceId, string moduleName) { return logger.BeginScope(new Dictionarystring, object { [TraceId] traceId, [Module] moduleName }); } } } /* # encoding: utf-8 # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看言語成了邀功盡責的功臣還需要行爲每日來值班嗎 # 描述 Factory Method 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 : FileLogSetup.cs */ using Karambolo.Extensions.Logging.File; using Microsoft.Extensions.Logging; using System; using System.Collections.Generic; using System.Text; namespace FactoryMethodPattern.Infrastructure.Logging { public static class FileLogSetup { // 全局静态日志工厂和你原有写法保持一致 private static readonly ILoggerFactory _loggerFactory; /// summary /// /// /summary static FileLogSetup() { string logRoot Path.Combine(AppContext.BaseDirectory, logs); // 自动创建日志目录防止权限/目录不存在报错 Directory.CreateDirectory(logRoot); _loggerFactory LoggerFactory.Create(builder { // 清空默认提供程序 builder.ClearProviders(); // 设置全局最低日志级别 builder.SetMinimumLevel(LogLevel.Trace); // 启用Karambolo File日志多文件配置Info/Error分离 builder.AddFile(fileBuilder { fileBuilder.RootPath AppContext.BaseDirectory; string todayDate DateTime.Now.ToString(yyyy-MM-dd); fileBuilder.Files new[] { // 1. Info日志仅记录 Information 及以上 new LogFileOptions { Path $logs/info-{todayDate}.log, MaxFileSize 1000000, // 单文件最大1MB MinLevel new Dictionarystring, LogLevel { [] LogLevel.Information }, IncludeScopes true, // 开启Scope自定义字段 }, // 2. Error日志仅记录 Error / Critical new LogFileOptions { Path $logs/error-{todayDate}.log, MaxFileSize 1000000, MinLevel new Dictionarystring, LogLevel { [] LogLevel.Error }, IncludeScopes true, } }; }); }); } /// summary /// 获取泛型日志实例和原有调用方式完全一致 /// /summary /// typeparam nameT日志归属类型/typeparam /// returnsILogger/returns public static ILoggerT CreateLoggerT() { return _loggerFactory.CreateLoggerT(); } } } /* # encoding: utf-8 # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看言語成了邀功盡責的功臣還需要行爲每日來值班嗎 # 描述 Factory Method 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 : ProcessConcurrentScheduler.cs */ using FactoryMethodPattern.Core.Abstractions; using FactoryMethodPattern.Core.Exceptions; using FactoryMethodPattern.Core.Models; using FactoryMethodPattern.Core.ThreadSafe; using FactoryMethodPattern.Infrastructure.Logging; using Microsoft.Extensions.Logging; using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.Text; namespace FactoryMethodPattern.Infrastructure.Concurrency { /// summary /// /// /summary public sealed class ProcessConcurrentScheduler { private readonly ConcurrentBagJewelryBusinessFactory _factoryPool new(); private readonly int _maxDegreeOfParallelism; private readonly ILoggerProcessConcurrentScheduler _logger FileLogSetup.CreateLoggerProcessConcurrentScheduler(); public ProcessConcurrentScheduler(int maxParallel 12) { _maxDegreeOfParallelism maxParallel; } public void RegisterFactory(JewelryBusinessFactory factory) { ConcurrentLockHelper.WriteLock(() _factoryPool.Add(factory)); _logger.LogInformation(注册业务工厂{FactoryName}, factory.GetType().Name); } public void RunAllSync(ProcessContext globalCtx) { using var scope _logger.CreateBusinessScope(globalCtx.TraceId.ToString(), 调度器同步执行); _logger.LogInformation(开始同步批量执行全部业务流程最大并发数{MaxParallel}, _maxDegreeOfParallelism); Parallel.ForEach(_factoryPool, new ParallelOptions { MaxDegreeOfParallelism _maxDegreeOfParallelism }, factory { try { var process factory.CreateProcess(); process.Execute(globalCtx); } catch (BusinessProcessException ex) { _logger.LogError(ex, 业务流程异常{ProcessName}, ex.ProcessName); } catch (Exception ex) { _logger.LogError(ex, 全局未知同步异常); } }); _logger.LogInformation(同步批量业务流程执行完毕); } public async Task RunAllAsync(ProcessContext globalCtx, CancellationToken token default) { using var scope _logger.CreateBusinessScope(globalCtx.TraceId.ToString(), 调度器异步执行); _logger.LogInformation(开始异步批量执行全部业务流程); var tasks new ListTask(); foreach (var factory in _factoryPool) { tasks.Add(Task.Run(async () { try { var process factory.CreateProcess(); await process.ExecuteAsync(globalCtx, token); } catch (BusinessProcessException ex) { _logger.LogError(ex, 异步业务流程异常{ProcessName}, ex.ProcessName); } catch (Exception ex) { _logger.LogError(ex, 全局未知异步异常); } }, token)); } await Task.WhenAll(tasks); _logger.LogInformation(异步批量业务流程执行完毕); } } } /* # encoding: utf-8 # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看言語成了邀功盡責的功臣還需要行爲每日來值班嗎 # 描述 Factory Method 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 : ConcurrentLockHelper.cs */ using System; using System.Collections.Generic; using System.Text; namespace FactoryMethodPattern.Core.ThreadSafe { /// summary /// /// /summary public static class ConcurrentLockHelper { private static readonly ReaderWriterLockSlim GlobalRwLock new(LockRecursionPolicy.SupportsRecursion); public static void ReadLock(Action action) { GlobalRwLock.EnterReadLock(); try { action.Invoke(); } finally { GlobalRwLock.ExitReadLock(); } } public static void WriteLock(Action action) { GlobalRwLock.EnterWriteLock(); try { action.Invoke(); } finally { GlobalRwLock.ExitWriteLock(); } } } } /* # encoding: utf-8 # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看言語成了邀功盡責的功臣還需要行爲每日來值班嗎 # 描述 Factory Method 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 : ProcessContext.cs */ using System; using System.Collections.Generic; using System.Text; namespace FactoryMethodPattern.Core.Models { /// summary /// /// /summary public sealed class ProcessContext { public Guid TraceId { get; init; } public DateTime StartTime { get; init; } DateTime.Now; public Dictionarystring, object DataBag { get; } new(); public bool IsTransactionRequired { get; set; } } } /* # encoding: utf-8 # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看言語成了邀功盡責的功臣還需要行爲每日來值班嗎 # 描述 Factory Method 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 : BusinessProcessException.cs */ using System; using System.Collections.Generic; using System.Text; namespace FactoryMethodPattern.Core.Exceptions { /// summary /// /// /summary public sealed class BusinessProcessException : Exception { public string ProcessName { get; } public BusinessProcessException(string processName, string message) : base(message) { ProcessName processName; } public BusinessProcessException(string processName, string message, Exception innerEx) : base(message, innerEx) { ProcessName processName; } } } /* # encoding: utf-8 # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看言語成了邀功盡責的功臣還需要行爲每日來值班嗎 # 描述 Factory Method 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 : JewelryBusinessFactory.cs */ using System; using System.Collections.Generic; using System.Text; namespace FactoryMethodPattern.Core.Abstractions { /// summary /// /// /summary public abstract class JewelryBusinessFactory { private readonly object _singletonLock new(); private IJewelryBusinessProcess? _cachedProcess; public IJewelryBusinessProcess CreateProcess() { if (_cachedProcess ! null) return _cachedProcess; lock (_singletonLock) { _cachedProcess ?? CreateConcreteProcess(); } return _cachedProcess; } protected abstract IJewelryBusinessProcess CreateConcreteProcess(); } } /* # encoding: utf-8 # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看言語成了邀功盡責的功臣還需要行爲每日來值班嗎 # 描述 Factory Method 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 : IJewelryBusinessProcess.cs */ using FactoryMethodPattern.Core.Models; using System; using System.Collections.Generic; using System.Text; namespace FactoryMethodPattern.Core.Abstractions { /// summary /// /// /summary public interface IJewelryBusinessProcess { string ProcessName { get; } void Execute(ProcessContext context); Task ExecuteAsync(ProcessContext context, CancellationToken token default); } }/* # encoding: utf-8 # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看言語成了邀功盡責的功臣還需要行爲每日來值班嗎 # 描述 Factory Method 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 : BusinessProcess.cs */ using FactoryMethodPattern.Core.Abstractions; using FactoryMethodPattern.Core.Models; using FactoryMethodPattern.Core.ThreadSafe; using FactoryMethodPattern.Infrastructure.Logging; using Microsoft.Extensions.Logging; using System; using System.Collections.Generic; using System.Text; namespace FactoryMethodPattern.BusinessModule.Processes { /// summary /// /// /summary public sealed class BusinessProcess : IJewelryBusinessProcess { public string ProcessName 业务; private readonly ILoggerBusinessProcess _logger FileLogSetup.CreateLoggerBusinessProcess(); public void Execute(ProcessContext context) { ConcurrentLockHelper.ReadLock(() { Console.WriteLine($[{context.TraceId}]【{ProcessName}】客户对接、订单洽谈、合同签订、售后跟进); _logger.LogInformation($[{context.TraceId}]【{ProcessName}】客户对接、订单洽谈、合同签订、售后跟进); }); } public async Task ExecuteAsync(ProcessContext context, CancellationToken token default) { await Task.Run(() Execute(context), token); } } } /* # encoding: utf-8 # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看言語成了邀功盡責的功臣還需要行爲每日來值班嗎 # 描述 Factory Method 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 : DesignDrawingProcess.cs */ using FactoryMethodPattern.Core.Abstractions; using FactoryMethodPattern.Core.Models; using FactoryMethodPattern.Core.ThreadSafe; using FactoryMethodPattern.Infrastructure.Logging; using Microsoft.Extensions.Logging; using System; using System.Collections.Generic; using System.Text; namespace FactoryMethodPattern.BusinessModule.Processes { public sealed class DesignDrawingProcess : IJewelryBusinessProcess { public string ProcessName 设计制图; private readonly ILoggerDesignDrawingProcess _logger FileLogSetup.CreateLoggerDesignDrawingProcess(); public void Execute(ProcessContext context) { ConcurrentLockHelper.ReadLock(() { Console.WriteLine($[{context.TraceId}]【{ProcessName}】3D建模、款式设计、图纸审核、客户确认); _logger.LogInformation($[{context.TraceId}]【{ProcessName}】3D建模、款式设计、图纸审核、客户确认); }); } public async Task ExecuteAsync(ProcessContext context, CancellationToken token default) { await Task.Run(() Execute(context), token); } } } /* # encoding: utf-8 # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看言語成了邀功盡責的功臣還需要行爲每日來值班嗎 # 描述 Factory Method 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 FactoryMethodPattern.Core.Abstractions; using FactoryMethodPattern.Core.Models; using FactoryMethodPattern.Core.ThreadSafe; using FactoryMethodPattern.Infrastructure.Logging; using Microsoft.Extensions.Logging; using System; using System.Collections.Generic; using System.Text; namespace FactoryMethodPattern.BusinessModule.Processes { /// summary /// /// /summary public sealed class FinanceProcess : IJewelryBusinessProcess { public string ProcessName 财务; private readonly ILoggerFinanceProcess _logger FileLogSetup.CreateLoggerFinanceProcess(); public void Execute(ProcessContext context) { ConcurrentLockHelper.ReadLock(() { Console.WriteLine($[{context.TraceId}]【{ProcessName}】成本核算、应收应付、开票、工资结算、报表生成); _logger.LogInformation($[{context.TraceId}]【{ProcessName}】成本核算、应收应付、开票、工资结算、报表生成); }); } public async Task ExecuteAsync(ProcessContext context, CancellationToken token default) { await Task.Run(() Execute(context), token); } } } /* # encoding: utf-8 # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看言語成了邀功盡責的功臣還需要行爲每日來值班嗎 # 描述 Factory Method 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 FactoryMethodPattern.Core.Abstractions; using FactoryMethodPattern.Core.Models; using FactoryMethodPattern.Core.ThreadSafe; using FactoryMethodPattern.Infrastructure.Logging; using Microsoft.Extensions.Logging; using System; using System.Collections.Generic; using System.Text; namespace FactoryMethodPattern.BusinessModule.Processes { /// summary /// /// /summary public sealed class HRAdminProcess : IJewelryBusinessProcess { public string ProcessName 人事行政; private readonly ILoggerHRAdminProcess _logger FileLogSetup.CreateLoggerHRAdminProcess(); public void Execute(ProcessContext context) { ConcurrentLockHelper.ReadLock(() { Console.WriteLine($[{context.TraceId}]【{ProcessName}】招聘、考勤、社保、办公用品管理、制度执行); _logger.LogInformation($[{context.TraceId}]【{ProcessName}】招聘、考勤、社保、办公用品管理、制度执行); }); } public async Task ExecuteAsync(ProcessContext context, CancellationToken token default) { await Task.Run(() Execute(context), token); } } } /* # encoding: utf-8 # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看言語成了邀功盡責的功臣還需要行爲每日來值班嗎 # 描述 Factory Method 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 : ITProcess.cs */ using FactoryMethodPattern.Core.Abstractions; using FactoryMethodPattern.Core.Models; using FactoryMethodPattern.Core.ThreadSafe; using FactoryMethodPattern.Infrastructure.Logging; using Microsoft.Extensions.Logging; using System; using System.Collections.Generic; using System.Text; namespace FactoryMethodPattern.BusinessModule.Processes { /// summary /// /// /summary public sealed class ITProcess : IJewelryBusinessProcess { public string ProcessName IT; private readonly ILoggerITProcess _logger FileLogSetup.CreateLoggerITProcess(); public void Execute(ProcessContext context) { ConcurrentLockHelper.ReadLock(() { Console.WriteLine($[{context.TraceId}]【 {ProcessName}】系统维护、数据备份、网络安全、软件更新、设备检修); _logger.LogInformation($[{context.TraceId}]【{ProcessName}】系统维护、数据备份、网络安全、软件更新、设备检修); }); } public async Task ExecuteAsync(ProcessContext context, CancellationToken token default) { await Task.Run(() Execute(context), token); } } } /* # encoding: utf-8 # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看言語成了邀功盡責的功臣還需要行爲每日來值班嗎 # 描述 Factory Method 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 FactoryMethodPattern.Core.Abstractions; using FactoryMethodPattern.Core.Models; using FactoryMethodPattern.Core.ThreadSafe; using FactoryMethodPattern.Infrastructure.Logging; using Microsoft.Extensions.Logging; using System; using System.Collections.Generic; using System.Text; namespace FactoryMethodPattern.BusinessModule.Processes { /// summary /// /// /summary public sealed class LogisticsProcess : IJewelryBusinessProcess { public string ProcessName 物流; private readonly ILoggerLogisticsProcess _logger FileLogSetup.CreateLoggerLogisticsProcess(); public void Execute(ProcessContext context) { ConcurrentLockHelper.ReadLock(() { Console.WriteLine($[{context.TraceId}]【 {ProcessName}】订单打包、保价发货、轨迹跟踪、签收确认); _logger.LogInformation($[{context.TraceId}]【{ProcessName}】订单打包、保价发货、轨迹跟踪、签收确认); }); } public async Task ExecuteAsync(ProcessContext context, CancellationToken token default) { await Task.Run(() Execute(context), token); } } } /* # encoding: utf-8 # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看言語成了邀功盡責的功臣還需要行爲每日來值班嗎 # 描述 Factory Method 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 FactoryMethodPattern.Core.Abstractions; using FactoryMethodPattern.Core.Models; using FactoryMethodPattern.Core.ThreadSafe; using FactoryMethodPattern.Infrastructure.Logging; using Microsoft.Extensions.Logging; using System; using System.Collections.Generic; using System.Text; namespace FactoryMethodPattern.BusinessModule.Processes { /// summary /// /// /summary public sealed class MarketingProcess : IJewelryBusinessProcess { public string ProcessName 营销推广; private readonly ILoggerMarketingProcess _logger FileLogSetup.CreateLoggerMarketingProcess(); public void Execute(ProcessContext context) { ConcurrentLockHelper.ReadLock(() { Console.WriteLine($[{context.TraceId}]【{ProcessName}】线上直播、短视频运营、门店活动、品牌宣传); _logger.LogInformation($[{context.TraceId}]【{ProcessName}】线上直播、短视频运营、门店活动、品牌宣传); }); } public async Task ExecuteAsync(ProcessContext context, CancellationToken token default) { await Task.Run(() Execute(context), token); } } } /* # encoding: utf-8 # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看言語成了邀功盡責的功臣還需要行爲每日來值班嗎 # 描述 Factory Method 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 : PackagingProcess.cs */ using FactoryMethodPattern.Core.Abstractions; using FactoryMethodPattern.Core.Models; using FactoryMethodPattern.Core.ThreadSafe; using FactoryMethodPattern.Infrastructure.Logging; using Microsoft.Extensions.Logging; using System; using System.Collections.Generic; using System.Text; namespace FactoryMethodPattern.BusinessModule.Processes { /// summary /// /// /summary public sealed class PackagingProcess : IJewelryBusinessProcess { public string ProcessName 包装; private readonly ILoggerPackagingProcess _logger FileLogSetup.CreateLoggerPackagingProcess(); public void Execute(ProcessContext context) { ConcurrentLockHelper.ReadLock(() { Console.WriteLine($[{context.TraceId}]【{ProcessName}】礼盒包装、证书装订、防伪标签粘贴); _logger.LogInformation($[{context.TraceId}]【{ProcessName}】礼盒包装、证书装订、防伪标签粘贴); }); } public async Task ExecuteAsync(ProcessContext context, CancellationToken token default) { await Task.Run(() Execute(context), token); } } } /* # encoding: utf-8 # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看言語成了邀功盡責的功臣還需要行爲每日來值班嗎 # 描述 Factory Method 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 : ProductionProcess.cs */ using FactoryMethodPattern.Core.Abstractions; using FactoryMethodPattern.Core.Models; using FactoryMethodPattern.Core.ThreadSafe; using FactoryMethodPattern.Infrastructure.Logging; using Microsoft.Extensions.Logging; using System; using System.Collections.Generic; using System.Text; namespace FactoryMethodPattern.BusinessModule.Processes { /// summary /// /// /summary public sealed class ProductionProcess : IJewelryBusinessProcess { public string ProcessName 加工生产; private readonly ILoggerProductionProcess _logger FileLogSetup.CreateLoggerProductionProcess(); public void Execute(ProcessContext context) { ConcurrentLockHelper.ReadLock(() { Console.WriteLine($[{context.TraceId}]【⚒️{ProcessName}】失蜡铸造、宝石镶嵌、抛光、打磨); _logger.LogInformation($[{context.TraceId}]【{ProcessName}】失蜡铸造、宝石镶嵌、抛光、打磨); }); } public async Task ExecuteAsync(ProcessContext context, CancellationToken token default) { await Task.Run(() Execute(context), token); } } } /* # encoding: utf-8 # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看言語成了邀功盡責的功臣還需要行爲每日來值班嗎 # 描述 Factory Method 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 : QualityInspectionProcess.cs */ using FactoryMethodPattern.Core.Abstractions; using FactoryMethodPattern.Core.Models; using FactoryMethodPattern.Core.ThreadSafe; using FactoryMethodPattern.Infrastructure.Logging; using Microsoft.Extensions.Logging; using System; using System.Collections.Generic; using System.Text; namespace FactoryMethodPattern.BusinessModule.Processes { /// summary /// /// /summary public sealed class QualityInspectionProcess : IJewelryBusinessProcess { public string ProcessName 质检; private readonly ILoggerQualityInspectionProcess _logger FileLogSetup.CreateLoggerQualityInspectionProcess(); public void Execute(ProcessContext context) { ConcurrentLockHelper.ReadLock(() { Console.WriteLine($[{context.TraceId}]【⚒️{ProcessName}】工艺检查、纯度复检、尺寸校验、合格判定); _logger.LogInformation($[{context.TraceId}]【{ProcessName}】工艺检查、纯度复检、尺寸校验、合格判定); }); } public async Task ExecuteAsync(ProcessContext context, CancellationToken token default) { await Task.Run(() Execute(context), token); } } } /* # encoding: utf-8 # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看言語成了邀功盡責的功臣還需要行爲每日來值班嗎 # 描述 Factory Method 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 FactoryMethodPattern.Core.Abstractions; using FactoryMethodPattern.Core.Models; using FactoryMethodPattern.Core.ThreadSafe; using FactoryMethodPattern.Core.Exceptions; using FactoryMethodPattern.Infrastructure.Logging; using Microsoft.Extensions.Logging; using System; using System.Collections.Generic; using System.Text; namespace FactoryMethodPattern.BusinessModule.Processes { /// summary /// /// /summary public sealed class RawMaterialPurchaseProcess : IJewelryBusinessProcess { public string ProcessName 原料采购核验; private readonly ILoggerRawMaterialPurchaseProcess _logger FileLogSetup.CreateLoggerRawMaterialPurchaseProcess(); public void Execute(ProcessContext context) { ConcurrentLockHelper.ReadLock(() { Console.WriteLine($[{context.TraceId}]【{ProcessName}】金/银/宝石验收、纯度检测、入库登记); _logger.LogInformation(金/银/宝石验收、纯度检测、入库登记); if (context.DataBag.TryGetValue(MaterialWeight, out var weightObj) decimal.TryParse(weightObj.ToString(), out decimal weight) weight 0) { throw new BusinessProcessException(ProcessName, 原料重量不能小于等于0); } }); } public async Task ExecuteAsync(ProcessContext context, CancellationToken token default) { await Task.Run(() Execute(context), token); } } } /* # encoding: utf-8 # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看言語成了邀功盡責的功臣還需要行爲每日來值班嗎 # 描述 Factory Method 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 : TrainingProcess.cs */ using FactoryMethodPattern.Core.Abstractions; using FactoryMethodPattern.Core.Models; using FactoryMethodPattern.Core.ThreadSafe; using FactoryMethodPattern.Infrastructure.Logging; using Microsoft.Extensions.Logging; using System; using System.Collections.Generic; using System.Text; namespace FactoryMethodPattern.BusinessModule.Processes { /// summary /// /// /summary public sealed class TrainingProcess : IJewelryBusinessProcess { public string ProcessName 培训; private readonly ILoggerTrainingProcess _logger FileLogSetup.CreateLoggerTrainingProcess(); public void Execute(ProcessContext context) { ConcurrentLockHelper.ReadLock(() { Console.WriteLine($[{context.TraceId}]【{ProcessName}】新品知识、销售技巧、工艺标准、企业文化培训); _logger.LogInformation($[{context.TraceId}]【{ProcessName}】新品知识、销售技巧、工艺标准、企业文化培训); }); } public async Task ExecuteAsync(ProcessContext context, CancellationToken token default) { await Task.Run(() Execute(context), token); } } }调用/* * # encoding: utf-8 # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看言語成了邀功盡責的功臣還需要行爲每日來值班嗎 # 描述工厂方法模式 FactoryMethod 演示业务层 # 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 : FactoryMethodBll.cs * * **/ using System; using System.Collections.Generic; using System.Text; using FactoryMethodPattern; using FactoryMethodPattern.BusinessModule.Factories; using FactoryMethodPattern.Core.Models; using FactoryMethodPattern.Infrastructure.Concurrency; using FactoryMethodPattern.Infrastructure.Logging; using Microsoft.Extensions.Logging; namespace BLL { public class FactoryMethodBll { /// summary /// /// /summary public async void Demo() { // 程序根日志 var rootLogger FileLogSetup.CreateLoggerFactoryMethodBll(); // 全局业务链路上下文 var globalContext new ProcessContext { TraceId Guid.NewGuid(), IsTransactionRequired true }; globalContext.DataBag.Add(MaterialWeight, 1200.00m); using var rootScope rootLogger.CreateBusinessScope(globalContext.TraceId.ToString(), 程序入口); rootLogger.LogInformation((工厂方法模式珠宝企业工厂业务系统启动链路TraceId{TraceId}, globalContext.TraceId); // 初始化调度器 var scheduler new ProcessConcurrentScheduler(12); // 注册全部业务工厂 scheduler.RegisterFactory(new RawMaterialPurchaseFactory()); scheduler.RegisterFactory(new DesignDrawingFactory()); scheduler.RegisterFactory(new ProductionFactory()); scheduler.RegisterFactory(new QualityInspectionFactory()); scheduler.RegisterFactory(new PackagingFactory()); scheduler.RegisterFactory(new LogisticsFactory()); scheduler.RegisterFactory(new FinanceFactory()); scheduler.RegisterFactory(new MarketingFactory()); scheduler.RegisterFactory(new BusinessFactory()); scheduler.RegisterFactory(new HRAdminFactory()); scheduler.RegisterFactory(new ITFactory()); scheduler.RegisterFactory(new TrainingFactory()); // 同步并发执行 Console.WriteLine(\n 同步高并发执行 ); scheduler.RunAllSync(globalContext); // 异步并发执行 Console.WriteLine(\n 异步高并发执行 ); await scheduler.RunAllAsync(globalContext); rootLogger.LogInformation(全部业务流程执行完成程序即将退出); Console.WriteLine(执行完成按任意键退出); Console.ReadLine(); } } }输出