CSharp: Abstract Factory Pattern using .net 10

项目结构:

09921efa-9a22-482d-a3dc-e9ba73c5cf59

72da08d7-1858-4450-8508-3f646f6a99e5

 

/* 
# encoding: utf-8 
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:设计模式 Design Patterns Abstract Factory 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-07 6:50
# User      :  geovindu
# Product   : Visual Studio 2026
# Project   : CSharpDesignPatterns
# File      : FileLoggerOptions.cs
 AbstractFactoryPattern/
├─ Abstractions/
│  ├─ Logging/
│  │  ├─ FileLoggerOptions.cs
│  ├─ Models/
│  │  └─ StructLogRecord.cs
│  └─ Process/
│     ├─ IJewelryProcess.cs
│     └─ IJewelryProcessFactory.cs
├─ Infrastructure/
│  └─ Logging/
│     ├─ ConcurrentFileLogger.cs
│     ├─ ConcurrentFileLoggerProvider.cs
│     └─ LoggerExtensions.cs
├─ Domain/
│  ├─ MaterialPurchase/       原料采购 📦
│  ├─ Design/                  设计 🎨
│  ├─ Production/              生产 🔥
│  ├─ QualityInspect/          质检 🔍
│  ├─ Package/                 包装 🎁
│  ├─ Logistics/               物流 🚚
│  ├─ Finance/                 财务 💰
│  ├─ Marketing/               营销 📣
│  ├─ BusinessSale/            业务 🤝
│  ├─ HumanResourceAdmin/      人事行政 👥
│  ├─ InformationTech/         IT 💻
│  └─ Training/                ✅  培训部门 📚
├─ Application/
│  └─ JewelryProcessScheduler.cs
*/

using System;
using System.Collections.Generic;
using System.Text;

namespace AbstractFactoryPattern.Abstractions.Logging
{


    /// <summary>
    /// 
    /// </summary>
    public sealed class FileLoggerOptions
    {
        public string LogRootDirectory { get; set; } = string.Empty;
        public string LogFileNameTemplate { get; set; } = "app-{0}.log";
        public bool EnableStructuredJsonLog { get; set; } = true;
        public bool AutoFlushWriter { get; set; } = true;
    }
}


/* 
# encoding: utf-8 
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:设计模式 Design Patterns Abstract Factory 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-07 6:50
# User      :  geovindu
# Product   : Visual Studio 2026
# Project   : CSharpDesignPatterns
# File      : StructLogRecord.cs
*/

using System;
using System.Collections.Generic;
using System.Text;

namespace AbstractFactoryPattern.Abstractions.Models
{
    using Microsoft.Extensions.Logging;
    using System;
    using System.Collections.Generic;  
    /// <summary>
    /// 
    /// </summary>
    public sealed class StructLogRecord
    {
        public DateTime Timestamp { get; set; }
        public LogLevel Level { get; set; }
        public string Category { get; set; } = string.Empty;
        public string Message { get; set; } = string.Empty;
        public string? Exception { get; set; }
        public Dictionary<string, object?> ExtData { get; set; } = new();
        public int ThreadId { get; set; }
    }
}


/* 
# encoding: utf-8 
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:设计模式 Design Patterns Abstract Factory 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-07 6:50
# User      :  geovindu
# Product   : Visual Studio 2026
# Project   : CSharpDesignPatterns
# File      : IJewelryProcess.cs
*/


using System;
using System.Collections.Generic;
using System.Text;

namespace AbstractFactoryPattern.Abstractions.Process
{


    /// <summary>
    /// 契约层(所有接口、实体模型)
    /// </summary>
    public interface IJewelryProcess
    {
        void ExecuteBusinessProcess();
    }
}



/* 
# encoding: utf-8 
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:设计模式 Design Patterns Abstract Factory 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-07 6:50
# User      :  geovindu
# Product   : Visual Studio 2026
# Project   : CSharpDesignPatterns
# File      : IJewelryProcessFactory.cs
*/

using System;
using System.Collections.Generic;
using System.Text;

namespace AbstractFactoryPattern.Abstractions.Process
{



    /// <summary>
    /// 契约层(所有接口、实体模型)
    /// </summary>
    public interface IJewelryProcessFactory
    {
        IJewelryProcess CreateProcessInstance();
    }
}



/* 
# encoding: utf-8 
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:设计模式 Design Patterns Abstract Factory 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-07 6:50
# User      :  geovindu
# Product   : Visual Studio 2026
# Project   : CSharpDesignPatterns
# File      : JewelryProcessScheduler.cs
*/


using AbstractFactoryPattern.Abstractions.Process;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Text;

namespace AbstractFactoryPattern.Application
{


    /// <summary>
    /// 应用调度层(流程调度器、业务编排)
    /// </summary>
    public sealed class JewelryProcessScheduler
    {
        private readonly IEnumerable<IJewelryProcessFactory> _factories;
        private readonly ILogger<JewelryProcessScheduler> _logger;

        public JewelryProcessScheduler(IEnumerable<IJewelryProcessFactory> factories, ILogger<JewelryProcessScheduler> logger)
            => (_factories, _logger) = (factories, logger);

        public void RunAllSerial()
        {
            _logger.LogInformation("🚀==================== 珠宝全业务流程启动 ====================");
            foreach (var f in _factories) Execute(f);
            _logger.LogInformation("🎉==================== 所有业务流程执行完成 ====================");
        }

        public async Task RunAllConcurrentAsync()
        {
            _logger.LogInformation("⚡【高并发模式】多线程执行业务流程");
            var tasks = new List<Task>();
            foreach (var f in _factories) tasks.Add(Task.Run(() => Execute(f)));
            await Task.WhenAll(tasks);
            _logger.LogInformation("✅【并发完成】所有部门流程执行完毕");
        }

        private void Execute(IJewelryProcessFactory factory)
        {
            try
            {
                var proc = factory.CreateProcessInstance();
                proc.ExecuteBusinessProcess();
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, "❌【执行失败】{Factory}", factory.GetType().Name);
            }
        }
    }
}

  

/* 
# encoding: utf-8 
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:设计模式 Design Patterns Abstract Factory 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-07 6:50
# User      :  geovindu
# Product   : Visual Studio 2026
# Project   : CSharpDesignPatterns
# File      : ConcurrentFileLogger.cs
*/

using AbstractFactoryPattern.Abstractions.Models;
using AbstractFactoryPattern.Abstractions.Logging;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Text;
using System.Text.Json;

namespace AbstractFactoryPattern.Infrastructure.Logging
{


   /// <summary>
   /// 
   /// </summary>
    internal sealed class ConcurrentFileLogger : ILogger
    {
        private readonly string _categoryName;
        private readonly FileLoggerOptions _options;
        private readonly ConcurrentDictionary<string, StreamWriter> _writerPool;
        private static readonly JsonSerializerOptions _jsonOpts = new() { WriteIndented = false };

        public ConcurrentFileLogger(string categoryName, FileLoggerOptions options, ConcurrentDictionary<string, StreamWriter> writerPool)
        {
            _categoryName = categoryName;
            _options = options;
            _writerPool = writerPool;
        }

        public IDisposable? BeginScope<TState>(TState state) where TState : notnull => null;
        public bool IsEnabled(LogLevel logLevel) => logLevel != LogLevel.None;

        public void Log<TState>(LogLevel logLevel, EventId eventId, TState state, Exception? exception, Func<TState, Exception?, string> formatter)
        {
            if (!IsEnabled(logLevel)) return;

            try
            {
                var msg = formatter(state, exception);
                var now = DateTime.Now;
                var tid = Environment.CurrentManagedThreadId;

                var log = new StructLogRecord
                {
                    Timestamp = now,
                    Level = logLevel,
                    Category = _categoryName,
                    Message = msg,
                    ThreadId = tid,
                    Exception = exception?.ToString()
                };

                var content = _options.EnableStructuredJsonLog
                    ? JsonSerializer.Serialize(log, _jsonOpts)
                    : $"[{now:yyyy-MM-dd HH:mm:ss.fff}] [{logLevel}] 🧵{tid} | {_categoryName} | {msg}";

                if (exception != null)
                    content += Environment.NewLine + exception;

                WriteFile(logLevel, content);
            }
            catch { }
        }

        private void WriteFile(LogLevel level, string msg)
        {
            var date = DateTime.Now.ToString("yyyy-MM-dd");
            var levelName = level.ToString().ToLowerInvariant();
            var dir = Path.Combine(_options.LogRootDirectory, date);

            if (!Directory.Exists(dir)) Directory.CreateDirectory(dir);

            var path = Path.Combine(dir, string.Format(_options.LogFileNameTemplate, levelName));

            var writer = _writerPool.GetOrAdd(path, p =>
                new StreamWriter(new FileStream(p, FileMode.Append, FileAccess.Write, FileShare.ReadWrite, 4096), Encoding.UTF8)
                { AutoFlush = _options.AutoFlushWriter });

            lock (writer) writer.WriteLine(msg);
        }
    }
}



/* 
# encoding: utf-8 
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:设计模式 Design Patterns Abstract Factory 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-07 6:50
# User      :  geovindu
# Product   : Visual Studio 2026
# Project   : CSharpDesignPatterns
# File      : ConcurrentFileLoggerProvider.cs
*/


using Microsoft.Extensions.Logging;
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Text;
using AbstractFactoryPattern.Abstractions.Logging;
using Microsoft.Extensions.Logging;


namespace AbstractFactoryPattern.Infrastructure.Logging
{


    /// <summary>
    /// 
    /// </summary>
    internal sealed class ConcurrentFileLoggerProvider : ILoggerProvider
    {
        private readonly FileLoggerOptions _opt;
        private readonly ConcurrentDictionary<string, ILogger> _loggers = new();
        private readonly ConcurrentDictionary<string, StreamWriter> _writers = new();
        private bool _disposed;

        public ConcurrentFileLoggerProvider(FileLoggerOptions opt)
        {
            _opt = opt;
            if (!Directory.Exists(opt.LogRootDirectory))
                Directory.CreateDirectory(opt.LogRootDirectory);
        }

        public ILogger CreateLogger(string categoryName)
        {
            ObjectDisposedException.ThrowIf(_disposed, nameof(ConcurrentFileLoggerProvider));
            return _loggers.GetOrAdd(categoryName, c => new ConcurrentFileLogger(c, _opt, _writers));
        }

        public void Dispose()
        {
            if (_disposed) return;
            _disposed = true;

            foreach (var w in _writers.Values)
            {
                w.Flush();
                w.Close();
                w.Dispose();
            }

            _writers.Clear();
            _loggers.Clear();
            GC.SuppressFinalize(this);
        }
    }
}

、
/* 
# encoding: utf-8 
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:设计模式 Design Patterns Abstract Factory 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-07 6:50
# User      :  geovindu
# Product   : Visual Studio 2026
# Project   : CSharpDesignPatterns
# File      : LoggerExtensions.cs
*/

using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Text;
using AbstractFactoryPattern.Abstractions.Logging;


namespace AbstractFactoryPattern.Infrastructure.Logging
{

    /// <summary>
    /// 
    /// </summary>
    public static class LoggerExtensions
    {
        public static ILoggingBuilder AddEnterpriseFileLogger(this ILoggingBuilder builder, Action<FileLoggerOptions> config)
        {
            var opt = new FileLoggerOptions();
            config(opt);
            builder.AddProvider(new ConcurrentFileLoggerProvider(opt));
            return builder;
        }
    }
}

  

/* 
# encoding: utf-8 
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:设计模式 Design Patterns Abstract Factory 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-07 6:50
# User      :  geovindu
# Product   : Visual Studio 2026
# Project   : CSharpDesignPatterns
# File      : BusinessSaleFactory.cs
*/

using AbstractFactoryPattern.Abstractions.Process;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Text;

namespace AbstractFactoryPattern.Domain.BusinessSale
{


    /// <summary>
    /// /
    /// </summary>
    public sealed class BusinessSaleFactory : IJewelryProcessFactory
    {
        private readonly ILogger<BusinessSaleFactory> _logger;
        private readonly ILoggerFactory _factory;

        public BusinessSaleFactory(ILogger<BusinessSaleFactory> logger, ILoggerFactory factory)
            => (_logger, _factory) = (logger, factory);

        public IJewelryProcess CreateProcessInstance()
        {
            _logger.LogDebug("🏭【工厂创建】销售业务流程实例");
            return new BusinessSaleProcess(_factory.CreateLogger<BusinessSaleProcess>());
        }
    }
}



/* 
# encoding: utf-8 
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:设计模式 Design Patterns Abstract Factory 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-07 6:50
# User      :  geovindu
# Product   : Visual Studio 2026
# Project   : CSharpDesignPatterns
# File      : BusinessSaleProcess.cs
*/

using AbstractFactoryPattern.Abstractions.Process;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Text;

namespace AbstractFactoryPattern.Domain.BusinessSale
{


    /// <summary>
    /// 
    /// </summary>
    public sealed class BusinessSaleProcess : IJewelryProcess
    {
        private readonly ILogger<BusinessSaleProcess> _logger;
        public BusinessSaleProcess(ILogger<BusinessSaleProcess> logger) => _logger = logger;

        public void ExecuteBusinessProcess()
        {
            _logger.LogInformation("🤝【销售业务】客户对接、定制洽谈、订单签约、售后维护");
            _logger.LogDebug("✅【业务完成】客户档案、复购回访、售后工单处理");
        }
    }
}



/* 
# encoding: utf-8 
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:设计模式 Design Patterns Abstract Factory 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-07 6:50
# User      :  geovindu
# Product   : Visual Studio 2026
# Project   : CSharpDesignPatterns
# File      : DesignFactory.cs
*/


using AbstractFactoryPattern.Abstractions.Process;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Text;

namespace AbstractFactoryPattern.Domain.Design
{


   /// <summary>
   /// 
   /// </summary>
    public sealed class DesignFactory : IJewelryProcessFactory
    {
        private readonly ILogger<DesignFactory> _logger;
        private readonly ILoggerFactory _factory;

        public DesignFactory(ILogger<DesignFactory> logger, ILoggerFactory factory)
            => (_logger, _factory) = (logger, factory);

        public IJewelryProcess CreateProcessInstance()
        {
            _logger.LogDebug("🏭【工厂创建】设计制图流程实例");
            return new DesignProcess(_factory.CreateLogger<DesignProcess>());
        }
    }
}


/* 
# encoding: utf-8 
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:设计模式 Design Patterns Abstract Factory 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-07 6:50
# User      :  geovindu
# Product   : Visual Studio 2026
# Project   : CSharpDesignPatterns
# File      : DesignProcess.cs
*/


using AbstractFactoryPattern.Abstractions.Process;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Text;

namespace AbstractFactoryPattern.Domain.Design
{


    /// <summary>
    /// 
    /// </summary>
    public sealed class DesignProcess : IJewelryProcess
    {
        private readonly ILogger<DesignProcess> _logger;
        public DesignProcess(ILogger<DesignProcess> logger) => _logger = logger;

        public void ExecuteBusinessProcess()
        {
            _logger.LogInformation("🎨【设计制图】3D建模、款式渲染、工艺图纸绘制");
            _logger.LogDebug("📝【设计确认】客户需求确认 → 生产图纸输出");
        }
    }
}


/* 
# encoding: utf-8 
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:设计模式 Design Patterns Abstract Factory 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-07 6:50
# User      :  geovindu
# Product   : Visual Studio 2026
# Project   : CSharpDesignPatterns
# File      : FinanceFactory.cs
*/
using AbstractFactoryPattern.Abstractions.Process;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Text;

namespace AbstractFactoryPattern.Domain.Finance
{

    /// <summary>
    /// 
    /// </summary>
    public sealed class FinanceFactory : IJewelryProcessFactory
    {
        private readonly ILogger<FinanceFactory> _logger;
        private readonly ILoggerFactory _factory;

        public FinanceFactory(ILogger<FinanceFactory> logger, ILoggerFactory factory)
            => (_logger, _factory) = (logger, factory);

        public IJewelryProcess CreateProcessInstance()
        {
            _logger.LogDebug("🏭【工厂创建】财务流程实例");
            return new FinanceProcess(_factory.CreateLogger<FinanceProcess>());
        }
    }
}


/* 
# encoding: utf-8 
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:设计模式 Design Patterns Abstract Factory 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-07 6:50
# User      :  geovindu
# Product   : Visual Studio 2026
# Project   : CSharpDesignPatterns
# File      : FinanceProcess.cs
*/

using AbstractFactoryPattern.Abstractions.Process;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Text;

namespace AbstractFactoryPattern.Domain.Finance
{


    /// <summary>
    /// /
    /// </summary>
    public sealed class FinanceProcess : IJewelryProcess
    {
        private readonly ILogger<FinanceProcess> _logger;
        public FinanceProcess(ILogger<FinanceProcess> logger) => _logger = logger;

        public void ExecuteBusinessProcess()
        {
            _logger.LogInformation("💰【财务核算】成本、营收、进销存、薪资、发票全流程");
            _logger.LogDebug("📊【财务完成】月度报表、税务申报、对账结算完成");
        }
    }

}


/* 
# encoding: utf-8 
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:设计模式 Design Patterns Abstract Factory 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-07 6:50
# User      :  geovindu
# Product   : Visual Studio 2026
# Project   : CSharpDesignPatterns
# File      : HRFactory.cs
*/
using AbstractFactoryPattern.Abstractions.Process;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Text;

namespace AbstractFactoryPattern.Domain.HumanResourceAdmin
{


    /// <summary>
    /// 
    /// </summary>
    public sealed class HRFactory : IJewelryProcessFactory
    {
        private readonly ILogger<HRFactory> _logger;
        private readonly ILoggerFactory _factory;

        public HRFactory(ILogger<HRFactory> logger, ILoggerFactory factory)
            => (_logger, _factory) = (logger, factory);

        public IJewelryProcess CreateProcessInstance()
        {
            _logger.LogDebug("🏭【工厂创建】人事行政流程实例");
            return new HRProcess(_factory.CreateLogger<HRProcess>());
        }
    }
}


/* 
# encoding: utf-8 
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:设计模式 Design Patterns Abstract Factory 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-07 6:50
# User      :  geovindu
# Product   : Visual Studio 2026
# Project   : CSharpDesignPatterns
# File      : HRProcess.cs
*/
using AbstractFactoryPattern.Abstractions.Process;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Text;

namespace AbstractFactoryPattern.Domain.HumanResourceAdmin
{


    /// <summary>
    /// /
    /// </summary>
    public sealed class HRProcess : IJewelryProcess
    {
        private readonly ILogger<HRProcess> _logger;
        public HRProcess(ILogger<HRProcess> logger) => _logger = logger;

        public void ExecuteBusinessProcess()
        {
            _logger.LogInformation("👥【人事行政】招聘、入职、考勤、绩效、后勤保障");
            _logger.LogDebug("✅【行政完成】员工档案、制度执行、物资采购完成");
        }
    }
}


/* 
# encoding: utf-8 
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:设计模式 Design Patterns Abstract Factory 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-07 6:50
# User      :  geovindu
# Product   : Visual Studio 2026
# Project   : CSharpDesignPatterns
# File      : ITFactory.cs
*/
using AbstractFactoryPattern.Abstractions.Process;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Text;

namespace AbstractFactoryPattern.Domain.InformationTech
{


    /// <summary>
    /// /
    /// </summary>
    public sealed class ITFactory : IJewelryProcessFactory
    {
        private readonly ILogger<ITFactory> _logger;
        private readonly ILoggerFactory _factory;

        public ITFactory(ILogger<ITFactory> logger, ILoggerFactory factory)
            => (_logger, _factory) = (logger, factory);

        public IJewelryProcess CreateProcessInstance()
        {
            _logger.LogDebug("🏭【工厂创建】IT运维流程实例");
            return new ITProcess(_factory.CreateLogger<ITProcess>());
        }
    }
}


/* 
# encoding: utf-8 
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:设计模式 Design Patterns Abstract Factory 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-07 6:50
# User      :  geovindu
# Product   : Visual Studio 2026
# Project   : CSharpDesignPatterns
# File      : ITProcess.cs
*/
using AbstractFactoryPattern.Abstractions.Process;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Text;

namespace AbstractFactoryPattern.Domain.InformationTech
{


    /// <summary>
    /// 
    /// </summary>
    public sealed class ITProcess : IJewelryProcess
    {
        private readonly ILogger<ITProcess> _logger;
        public ITProcess(ILogger<ITProcess> logger) => _logger = logger;

        public void ExecuteBusinessProcess()
        {
            _logger.LogInformation("💻【IT运维】系统维护、网络安全、数据备份、权限管理");
            _logger.LogDebug("✅【IT完成】服务器监控、故障排查、版本更新完成");
        }
    }
}


/* 
# encoding: utf-8 
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:设计模式 Design Patterns Abstract Factory 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-07 6:50
# User      :  geovindu
# Product   : Visual Studio 2026
# Project   : CSharpDesignPatterns
# File      : LogisticsFactory.cs
*/
using AbstractFactoryPattern.Abstractions.Process;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Text;

namespace AbstractFactoryPattern.Domain.Logistics
{

    /// <summary>
    /// 
    /// </summary>
    public sealed class LogisticsFactory : IJewelryProcessFactory
    {
        private readonly ILogger<LogisticsFactory> _logger;
        private readonly ILoggerFactory _factory;

        public LogisticsFactory(ILogger<LogisticsFactory> logger, ILoggerFactory factory)
            => (_logger, _factory) = (logger, factory);

        public IJewelryProcess CreateProcessInstance()
        {
            _logger.LogDebug("🏭【工厂创建】物流流程实例");
            return new LogisticsProcess(_factory.CreateLogger<LogisticsProcess>());
        }
    }
}


/* 
# encoding: utf-8 
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:设计模式 Design Patterns Abstract Factory 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-07 6:50
# User      :  geovindu
# Product   : Visual Studio 2026
# Project   : CSharpDesignPatterns
# File      : LogisticsProcess.cs
*/
using AbstractFactoryPattern.Abstractions.Process;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Text;

namespace AbstractFactoryPattern.Domain.Logistics
{


    /// <summary>
    /// 
    /// </summary>
    public sealed class LogisticsProcess : IJewelryProcess
    {
        private readonly ILogger<LogisticsProcess> _logger;
        public LogisticsProcess(ILogger<LogisticsProcess> logger) => _logger = logger;

        public void ExecuteBusinessProcess()
        {
            _logger.LogInformation("🚚【安全物流】保价运输、全程轨迹跟踪、专人押运");
            _logger.LogDebug("✅【物流完成】客户签收、交接单归档、异常理赔登记");
        }
    }
}


/* 
# encoding: utf-8 
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:设计模式 Design Patterns Abstract Factory 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-07 6:50
# User      :  geovindu
# Product   : Visual Studio 2026
# Project   : CSharpDesignPatterns
# File      : MarketingFactory.cs
*/

using AbstractFactoryPattern.Abstractions.Process;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Text;

namespace AbstractFactoryPattern.Domain.Marketing
{

    /// <summary>
    /// 
    /// </summary>
    public sealed class MarketingFactory : IJewelryProcessFactory
    {
        private readonly ILogger<MarketingFactory> _logger;
        private readonly ILoggerFactory _factory;

        public MarketingFactory(ILogger<MarketingFactory> logger, ILoggerFactory factory)
            => (_logger, _factory) = (logger, factory);

        public IJewelryProcess CreateProcessInstance()
        {
            _logger.LogDebug("🏭【工厂创建】营销流程实例");
            return new MarketingProcess(_factory.CreateLogger<MarketingProcess>());
        }
    }
}


/* 
# encoding: utf-8 
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:设计模式 Design Patterns Abstract Factory 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-07 6:50
# User      :  geovindu
# Product   : Visual Studio 2026
# Project   : CSharpDesignPatterns
# File      : MarketingProcess.cs
*/

using AbstractFactoryPattern.Abstractions.Process;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Text;

namespace AbstractFactoryPattern.Domain.Marketing
{


    /// <summary>
    /// 
    /// </summary>
    public sealed class MarketingProcess : IJewelryProcess
    {
        private readonly ILogger<MarketingProcess> _logger;
        public MarketingProcess(ILogger<MarketingProcess> logger) => _logger = logger;

        public void ExecuteBusinessProcess()
        {
            _logger.LogInformation("📣【品牌营销】线上投放、门店活动、新品推广、会员运营");
            _logger.LogDebug("📈【营销完成】流量统计、ROI核算、客户沉淀完成");
        }
    }
}

  

调用:

/* 
# encoding: utf-8 
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:设计模式 Design Patterns Abstract Factory 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-07 6:50
# User      :  geovindu
# Product   : Visual Studio 2026
# Project   : CSharpDesignPatterns
# File      : AbstractFactoryBll.cs
*/

using AbstractFactoryPattern;
using AbstractFactoryPattern.Abstractions.Process;
using AbstractFactoryPattern.Application;
using AbstractFactoryPattern.Domain.BusinessSale;
using AbstractFactoryPattern.Domain.Design;
using AbstractFactoryPattern.Domain.Finance;
using AbstractFactoryPattern.Domain.HumanResourceAdmin;
using AbstractFactoryPattern.Domain.InformationTech;
using AbstractFactoryPattern.Domain.Logistics;
using AbstractFactoryPattern.Domain.Marketing;
using AbstractFactoryPattern.Domain.MaterialPurchase;
using AbstractFactoryPattern.Domain.Package;
using AbstractFactoryPattern.Domain.Production;
using AbstractFactoryPattern.Domain.QualityInspect;
using AbstractFactoryPattern.Domain.Training;
using AbstractFactoryPattern.Infrastructure.Logging;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;

namespace BLL
{


    public class AbstractFactoryBll
    {



        /// <summary>
        /// 
        /// </summary>
        public async void Demo()
        {

            var host = Host.CreateDefaultBuilder()
                .ConfigureLogging(log =>
                {
                    log.ClearProviders();
                    log.AddEnterpriseFileLogger(opt =>
                    {
                        opt.LogRootDirectory = Path.Combine(AppContext.BaseDirectory, "Logs");
                        opt.LogFileNameTemplate = "app-{0}.log";
                        opt.EnableStructuredJsonLog = false;
                    });
                })
                .ConfigureServices(s =>
                {
                    s.AddTransient<IJewelryProcessFactory, MaterialPurchaseFactory>();
                    s.AddTransient<IJewelryProcessFactory, DesignFactory>();
                    s.AddTransient<IJewelryProcessFactory, ProductionFactory>();
                    s.AddTransient<IJewelryProcessFactory, QualityInspectFactory>();
                    s.AddTransient<IJewelryProcessFactory, PackageFactory>();
                    s.AddTransient<IJewelryProcessFactory, LogisticsFactory>();
                    s.AddTransient<IJewelryProcessFactory, FinanceFactory>();
                    s.AddTransient<IJewelryProcessFactory, MarketingFactory>();
                    s.AddTransient<IJewelryProcessFactory, BusinessSaleFactory>();
                    s.AddTransient<IJewelryProcessFactory, HRFactory>();
                    s.AddTransient<IJewelryProcessFactory, ITFactory>();
                    s.AddTransient<IJewelryProcessFactory, TrainingFactory>();

                    s.AddTransient<JewelryProcessScheduler>();
                })
                .Build();

            var scheduler = host.Services.GetRequiredService<JewelryProcessScheduler>();

            // 运行
            scheduler.RunAllSerial();
            // await scheduler.RunAllConcurrentAsync();

            await host.StopAsync();
        }
    }
}

  

输出:

[2026-07-07 06:32:17.751] [Information] 🧵2 | AbstractFactoryPattern.Application.JewelryProcessScheduler | 🚀==================== 珠宝全业务流程启动 ====================
[2026-07-07 06:32:17.762] [Information] 🧵2 | AbstractFactoryPattern.Domain.MaterialPurchase.MaterialPurchaseProcess | 📦【原料采购】黄金、钻石、宝石、铂金原材料采购启动
[2026-07-07 06:32:17.763] [Information] 🧵2 | AbstractFactoryPattern.Domain.MaterialPurchase.MaterialPurchaseProcess | ✅【原料入库】原材料核验完成,正式入库登记
[2026-07-07 06:32:17.763] [Information] 🧵2 | AbstractFactoryPattern.Domain.Design.DesignProcess | 🎨【设计制图】3D建模、款式渲染、工艺图纸绘制
[2026-07-07 06:32:17.764] [Information] 🧵2 | AbstractFactoryPattern.Domain.Production.ProductionProcess | 🔥【加工生产】开模、铸造、镶嵌、抛光全流程生产
[2026-07-07 06:32:17.765] [Information] 🧵2 | AbstractFactoryPattern.Domain.QualityInspect.QualityInspectProcess | 🔍【成品质检】材质、工艺、尺寸、外观全项检验
[2026-07-07 06:32:17.766] [Information] 🧵2 | AbstractFactoryPattern.Domain.Package.PackageProcess | 🎁【成品包装】礼盒、证书、防伪标签全套封装
[2026-07-07 06:32:17.766] [Information] 🧵2 | AbstractFactoryPattern.Domain.Logistics.LogisticsProcess | 🚚【安全物流】保价运输、全程轨迹跟踪、专人押运
[2026-07-07 06:32:17.767] [Information] 🧵2 | AbstractFactoryPattern.Domain.Finance.FinanceProcess | 💰【财务核算】成本、营收、进销存、薪资、发票全流程
[2026-07-07 06:32:17.768] [Information] 🧵2 | AbstractFactoryPattern.Domain.Marketing.MarketingProcess | 📣【品牌营销】线上投放、门店活动、新品推广、会员运营
[2026-07-07 06:32:17.768] [Information] 🧵2 | AbstractFactoryPattern.Domain.BusinessSale.BusinessSaleProcess | 🤝【销售业务】客户对接、定制洽谈、订单签约、售后维护
[2026-07-07 06:32:17.769] [Information] 🧵2 | AbstractFactoryPattern.Domain.HumanResourceAdmin.HRProcess | 👥【人事行政】招聘、入职、考勤、绩效、后勤保障
[2026-07-07 06:32:17.769] [Information] 🧵2 | AbstractFactoryPattern.Domain.InformationTech.ITProcess | 💻【IT运维】系统维护、网络安全、数据备份、权限管理
[2026-07-07 06:32:17.770] [Information] 🧵2 | AbstractFactoryPattern.Domain.Training.TrainingProcess | 📚【员工培训】珠宝知识、工艺技能、销售话术、服务礼仪
[2026-07-07 06:32:17.770] [Information] 🧵2 | AbstractFactoryPattern.Domain.Training.TrainingProcess | ✅【培训完成】员工能力提升,认证上岗
[2026-07-07 06:32:17.770] [Information] 🧵2 | AbstractFactoryPattern.Application.JewelryProcessScheduler | 🎉==================== 所有业务流程执行完成 ====================
[2026-07-07 06:32:52.690] [Information] 🧵2 | AbstractFactoryPattern.Application.JewelryProcessScheduler | 🚀==================== 珠宝全业务流程启动 ====================
[2026-07-07 06:32:52.700] [Information] 🧵2 | AbstractFactoryPattern.Domain.MaterialPurchase.MaterialPurchaseProcess | 📦【原料采购】黄金、钻石、宝石、铂金原材料采购启动
[2026-07-07 06:32:52.700] [Information] 🧵2 | AbstractFactoryPattern.Domain.MaterialPurchase.MaterialPurchaseProcess | ✅【原料入库】原材料核验完成,正式入库登记
[2026-07-07 06:32:52.701] [Information] 🧵2 | AbstractFactoryPattern.Domain.Design.DesignProcess | 🎨【设计制图】3D建模、款式渲染、工艺图纸绘制
[2026-07-07 06:32:52.701] [Information] 🧵2 | AbstractFactoryPattern.Domain.Production.ProductionProcess | 🔥【加工生产】开模、铸造、镶嵌、抛光全流程生产
[2026-07-07 06:32:52.702] [Information] 🧵2 | AbstractFactoryPattern.Domain.QualityInspect.QualityInspectProcess | 🔍【成品质检】材质、工艺、尺寸、外观全项检验
[2026-07-07 06:32:52.702] [Information] 🧵2 | AbstractFactoryPattern.Domain.Package.PackageProcess | 🎁【成品包装】礼盒、证书、防伪标签全套封装
[2026-07-07 06:32:52.703] [Information] 🧵2 | AbstractFactoryPattern.Domain.Logistics.LogisticsProcess | 🚚【安全物流】保价运输、全程轨迹跟踪、专人押运
[2026-07-07 06:32:52.703] [Information] 🧵2 | AbstractFactoryPattern.Domain.Finance.FinanceProcess | 💰【财务核算】成本、营收、进销存、薪资、发票全流程
[2026-07-07 06:32:52.704] [Information] 🧵2 | AbstractFactoryPattern.Domain.Marketing.MarketingProcess | 📣【品牌营销】线上投放、门店活动、新品推广、会员运营
[2026-07-07 06:32:52.704] [Information] 🧵2 | AbstractFactoryPattern.Domain.BusinessSale.BusinessSaleProcess | 🤝【销售业务】客户对接、定制洽谈、订单签约、售后维护
[2026-07-07 06:32:52.705] [Information] 🧵2 | AbstractFactoryPattern.Domain.HumanResourceAdmin.HRProcess | 👥【人事行政】招聘、入职、考勤、绩效、后勤保障
[2026-07-07 06:32:52.705] [Information] 🧵2 | AbstractFactoryPattern.Domain.InformationTech.ITProcess | 💻【IT运维】系统维护、网络安全、数据备份、权限管理
[2026-07-07 06:32:52.706] [Information] 🧵2 | AbstractFactoryPattern.Domain.Training.TrainingProcess | 📚【员工培训】珠宝知识、工艺技能、销售话术、服务礼仪
[2026-07-07 06:32:52.706] [Information] 🧵2 | AbstractFactoryPattern.Domain.Training.TrainingProcess | ✅【培训完成】员工能力提升,认证上岗
[2026-07-07 06:32:52.706] [Information] 🧵2 | AbstractFactoryPattern.Application.JewelryProcessScheduler | 🎉==================== 所有业务流程执行完成 ====================

  

 

posted @ 2026-07-07 19:47  ®Geovin Du Dream Park™  阅读(4)  评论(0)    收藏  举报