项目结构:

介绍了一种基于Python的函数式选项模式(Functional Options Pattern)在珠宝行业全业务流程配置管理中的应用。该模式通过定义可组合的配置函数(JewelryOption)来灵活定制业务参数,主要包含以下实现:
-
核心配置类JewelryBusinessConfig使用dataclass定义,包含原料采购、设计、生产、质检等12个业务模块的默认参数。
-
按业务模块划分的选项函数(如enable_vip_service()、set_material_standard()),每个函数返回一个修改配置的闭包。
-
工厂方法create_jewelry_business()支持通过可变参数组合多个选项来构建不同场景的配置实例。
-
预定义了三种典型配置场景:标准门店(全默认)、高端定制品牌(全套高级选项)、批发工厂(精简非核心功能)。
这种模式通过函数组合实现了业务配置的可插拔式管理,相比传统配置方式具有更好的可读性、可维护性和扩展性,特别适合珠宝行业这类多业务线、多运营模式的场景。
python
# encoding: utf-8
# 版权所有 2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Functional Options Pattern 函数式选项模式
# Author : geovindu,Geovin Du 涂聚文.
# IDE : PyCharm 2024.3.6 python 3.11
# os : windows 10
# database : mysql 9.0 sql server 2019, postgreSQL 17.0 Oracle 21c Neo4j
# Datetime : 2026/7/4 19:55
# User : geovindu
# Product : PyCharm
# Project : pydesginpattern
# File : biz_config.py
from dataclasses import dataclass
from typing import Optional
@dataclass(frozen=False)
class JewelryBusinessConfig:
"""
珠宝全业务流程统一配置实体,承载所有模块默认参数
"""
# 原料采购核验
material_check: bool = True
material_quality_standard: str = "GIA"
supplier_audit: bool = True
# 设计制图
design_software: str = "JewelCAD"
design_review: bool = True
custom_design: bool = False
# 加工生产
production_line: str = "标准生产线"
craft_level: str = "普通工艺"
quality_control_point: int = 3
# 质检
final_inspection: bool = True
inspection_standard: str = "国标"
rework_allowed: bool = True
# 包装
luxury_packaging: bool = False
gift_box_type: str = "基础礼盒"
anti_counterfeit: bool = True
# 物流
express_company: str = "顺丰"
insured_value: bool = True
international_shipping: bool = False
# 财务
auto_invoice: bool = True
tax_rate: float = 0.13
payment_terms: str = "款到发货"
# 营销推广
online_marketing: bool = True
offline_store: bool = True
advertising_budget: Optional[int] = None
# 门店业务
order_management: bool = True
after_sales_service: bool = True
vip_service: bool = False
# 人事行政
staff_training: bool = True
attendance_system: bool = True
office_supplies: bool = True
# IT系统
cloud_server: bool = True
data_backup: bool = True
system_security: bool = True
# encoding: utf-8
# 版权所有 2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Functional Options Pattern 函数式选项模式
# Author : geovindu,Geovin Du 涂聚文.
# IDE : PyCharm 2024.3.6 python 3.11
# os : windows 10
# database : mysql 9.0 sql server 2019, postgreSQL 17.0 Oracle 21c Neo4j
# Datetime : 2026/7/4 20:01
# User : geovindu
# Product : PyCharm
# Project : pydesginpattern
# File : business_options.py
from typing import Callable
from FunctionalOptionsPattern.config import JewelryBusinessConfig
JewelryOption = Callable[[JewelryBusinessConfig], None]
def enable_vip_service() -> JewelryOption:
def wrapper(cfg: JewelryBusinessConfig):
cfg.vip_service = True
return wrapper
# encoding: utf-8
# 版权所有 2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Functional Options Pattern 函数式选项模式
# Author : geovindu,Geovin Du 涂聚文.
# IDE : PyCharm 2024.3.6 python 3.11
# os : windows 10
# database : mysql 9.0 sql server 2019, postgreSQL 17.0 Oracle 21c Neo4j
# Datetime : 2026/7/4 20:04
# User : geovindu
# Product : PyCharm
# Project : pydesginpattern
# File : design_options.py
from typing import Callable
from FunctionalOptionsPattern.config import JewelryBusinessConfig
JewelryOption = Callable[[JewelryBusinessConfig], None]
def use_custom_design() -> JewelryOption:
def wrapper(cfg: JewelryBusinessConfig):
cfg.custom_design = True
return wrapper
def set_design_software(software: str) -> JewelryOption:
def wrapper(cfg: JewelryBusinessConfig):
cfg.design_software = software
return wrapper
# encoding: utf-8
# 版权所有 2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Functional Options Pattern 函数式选项模式
# Author : geovindu,Geovin Du 涂聚文.
# IDE : PyCharm 2024.3.6 python 3.11
# os : windows 10
# database : mysql 9.0 sql server 2019, postgreSQL 17.0 Oracle 21c Neo4j
# Datetime : 2026/7/4 20:00
# User : geovindu
# Product : PyCharm
# Project : pydesginpattern
# File : finance_options.py
from typing import Callable
from FunctionalOptionsPattern.config import JewelryBusinessConfig
JewelryOption = Callable[[JewelryBusinessConfig], None]
def set_tax_rate(rate: float) -> JewelryOption:
def wrapper(cfg: JewelryBusinessConfig):
cfg.tax_rate = rate
return wrapper
# encoding: utf-8
# 版权所有 2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Functional Options Pattern 函数式选项模式
# Author : geovindu,Geovin Du 涂聚文.
# IDE : PyCharm 2024.3.6 python 3.11
# os : windows 10
# database : mysql 9.0 sql server 2019, postgreSQL 17.0 Oracle 21c Neo4j
# Datetime : 2026/7/4 20:02
# User : geovindu
# Product : PyCharm
# Project : pydesginpattern
# File : hr_options.py
from typing import Callable
from FunctionalOptionsPattern.config import JewelryBusinessConfig
JewelryOption = Callable[[JewelryBusinessConfig], None]
def disable_staff_training() -> JewelryOption:
def wrapper(cfg: JewelryBusinessConfig):
cfg.staff_training = False
return wrapper
# encoding: utf-8
# 版权所有 2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Functional Options Pattern 函数式选项模式
# Author : geovindu,Geovin Du 涂聚文.
# IDE : PyCharm 2024.3.6 python 3.11
# os : windows 10
# database : mysql 9.0 sql server 2019, postgreSQL 17.0 Oracle 21c Neo4j
# Datetime : 2026/7/4 19:59
# User : geovindu
# Product : PyCharm
# Project : pydesginpattern
# File : inspect_options.py
from typing import Callable
from FunctionalOptionsPattern.config import JewelryBusinessConfig
JewelryOption = Callable[[JewelryBusinessConfig], None]
def set_inspection_standard(standard: str) -> JewelryOption:
def wrapper(cfg: JewelryBusinessConfig):
cfg.inspection_standard = standard
return wrapper
# encoding: utf-8
# 版权所有 2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Functional Options Pattern 函数式选项模式
# Author : geovindu,Geovin Du 涂聚文.
# IDE : PyCharm 2024.3.6 python 3.11
# os : windows 10
# database : mysql 9.0 sql server 2019, postgreSQL 17.0 Oracle 21c Neo4j
# Datetime : 2026/7/4 20:03
# User : geovindu
# Product : PyCharm
# Project : pydesginpattern
# File : it_options.py
from typing import Callable
from FunctionalOptionsPattern.config import JewelryBusinessConfig
JewelryOption = Callable[[JewelryBusinessConfig], None]
def disable_cloud_server() -> JewelryOption:
def wrapper(cfg: JewelryBusinessConfig):
cfg.cloud_server = False
return wrapper
# encoding: utf-8
# 版权所有 2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Functional Options Pattern 函数式选项模式
# Author : geovindu,Geovin Du 涂聚文.
# IDE : PyCharm 2024.3.6 python 3.11
# os : windows 10
# database : mysql 9.0 sql server 2019, postgreSQL 17.0 Oracle 21c Neo4j
# Datetime : 2026/7/4 20:05
# User : geovindu
# Product : PyCharm
# Project : pydesginpattern
# File : logistics_options.py
from typing import Callable
from FunctionalOptionsPattern.config import JewelryBusinessConfig
JewelryOption = Callable[[JewelryBusinessConfig], None]
def enable_international_shipping() -> JewelryOption:
def wrapper(cfg: JewelryBusinessConfig):
cfg.international_shipping = True
return wrapper
# encoding: utf-8
# 版权所有 2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Functional Options Pattern 函数式选项模式
# Author : geovindu,Geovin Du 涂聚文.
# IDE : PyCharm 2024.3.6 python 3.11
# os : windows 10
# database : mysql 9.0 sql server 2019, postgreSQL 17.0 Oracle 21c Neo4j
# Datetime : 2026/7/4 20:01
# User : geovindu
# Product : PyCharm
# Project : pydesginpattern
# File : marketing_options.py
from typing import Callable
from FunctionalOptionsPattern.config import JewelryBusinessConfig
JewelryOption = Callable[[JewelryBusinessConfig], None]
def set_advertising_budget(budget: int) -> JewelryOption:
def wrapper(cfg: JewelryBusinessConfig):
cfg.advertising_budget = budget
return wrapper
# encoding: utf-8
# 版权所有 2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Functional Options Pattern 函数式选项模式
# Author : geovindu,Geovin Du 涂聚文.
# IDE : PyCharm 2024.3.6 python 3.11
# os : windows 10
# database : mysql 9.0 sql server 2019, postgreSQL 17.0 Oracle 21c Neo4j
# Datetime : 2026/7/4 19:57
# User : geovindu
# Product : PyCharm
# Project : pydesginpattern
# File : material_options.py
from typing import Callable
from FunctionalOptionsPattern.config import JewelryBusinessConfig
# 函数式选项类型定义
JewelryOption = Callable[[JewelryBusinessConfig], None]
def disable_material_check() -> JewelryOption:
def wrapper(cfg: JewelryBusinessConfig):
cfg.material_check = False
return wrapper
def set_material_standard(standard: str) -> JewelryOption:
def wrapper(cfg: JewelryBusinessConfig):
cfg.material_quality_standard = standard
return wrapper
# encoding: utf-8
# 版权所有 2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Functional Options Pattern 函数式选项模式
# Author : geovindu,Geovin Du 涂聚文.
# IDE : PyCharm 2024.3.6 python 3.11
# os : windows 10
# database : mysql 9.0 sql server 2019, postgreSQL 17.0 Oracle 21c Neo4j
# Datetime : 2026/7/4 19:59
# User : geovindu
# Product : PyCharm
# Project : pydesginpattern
# File : package_options.py
from typing import Callable
from FunctionalOptionsPattern.config import JewelryBusinessConfig
JewelryOption = Callable[[JewelryBusinessConfig], None]
def enable_luxury_packaging() -> JewelryOption:
def wrapper(cfg: JewelryBusinessConfig):
cfg.luxury_packaging = True
cfg.gift_box_type = "奢华礼盒"
return wrapper
# encoding: utf-8
# 版权所有 2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Functional Options Pattern 函数式选项模式
# Author : geovindu,Geovin Du 涂聚文.
# IDE : PyCharm 2024.3.6 python 3.11
# os : windows 10
# database : mysql 9.0 sql server 2019, postgreSQL 17.0 Oracle 21c Neo4j
# Datetime : 2026/7/4 19:58
# User : geovindu
# Product : PyCharm
# Project : pydesginpattern
# File : produce_options.py
from typing import Callable
from FunctionalOptionsPattern.config import JewelryBusinessConfig
JewelryOption = Callable[[JewelryBusinessConfig], None]
def set_production_line(line: str) -> JewelryOption:
def wrapper(cfg: JewelryBusinessConfig):
cfg.production_line = line
return wrapper
def upgrade_craft() -> JewelryOption:
def wrapper(cfg: JewelryBusinessConfig):
cfg.craft_level = "高级工艺"
cfg.quality_control_point = 5
return wrapper
python
# encoding: utf-8
# 版权所有 2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Functional Options Pattern 函数式选项模式
# Author : geovindu,Geovin Du 涂聚文.
# IDE : PyCharm 2024.3.6 python 3.11
# os : windows 10
# database : mysql 9.0 sql server 2019, postgreSQL 17.0 Oracle 21c Neo4j
# Datetime : 2026/7/4 20:06
# User : geovindu
# Product : PyCharm
# Project : pydesginpattern
# File : biz_service.py
from FunctionalOptionsPattern.factory import create_jewelry_business
from FunctionalOptionsPattern.options import (
disable_material_check,
set_material_standard,
use_custom_design,
set_design_software,
set_production_line,
upgrade_craft,
set_inspection_standard,
enable_luxury_packaging,
enable_international_shipping,
set_tax_rate,
set_advertising_budget,
enable_vip_service,
disable_staff_training,
disable_cloud_server,
)
from FunctionalOptionsPattern.config import JewelryBusinessConfig
def get_standard_store_config() -> JewelryBusinessConfig:
"""
标准线下珠宝门店:完全使用默认配置
:return:
"""
return create_jewelry_business()
def get_luxury_custom_brand_config() -> JewelryBusinessConfig:
"""
高端定制珠宝品牌:全套高端业务选项组合
:return:
"""
cfg = create_jewelry_business(
set_material_standard("GIA+国检双标准"),
use_custom_design(),
set_design_software("Rhino+Matrix"),
set_production_line("高端定制生产线"),
upgrade_craft(),
set_inspection_standard("奢侈品级"),
enable_luxury_packaging(),
enable_international_shipping(),
enable_vip_service(),
set_advertising_budget(1000000),
)
return cfg
def get_wholesale_factory_config() -> JewelryBusinessConfig:
"""
珠宝批发工厂:精简非核心业务配置
:return:
"""
cfg = create_jewelry_business(
disable_material_check(),
disable_staff_training(),
disable_cloud_server(),
set_tax_rate(0.09),
)
return cfg
# encoding: utf-8
# 版权所有 2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Functional Options Pattern 函数式选项模式
# Author : geovindu,Geovin Du 涂聚文.
# IDE : PyCharm 2024.3.6 python 3.11
# os : windows 10
# database : mysql 9.0 sql server 2019, postgreSQL 17.0 Oracle 21c Neo4j
# Datetime : 2026/7/4 20:06
# User : geovindu
# Product : PyCharm
# Project : pydesginpattern
# File : biz_factory.py
from typing import Tuple
from FunctionalOptionsPattern.config import JewelryBusinessConfig
from FunctionalOptionsPattern.options.material_options import JewelryOption
def create_jewelry_business(*options: JewelryOption) -> JewelryBusinessConfig:
"""
企业级Functional Options 构造工厂
1. 初始化全局默认配置
2. 批量应用自定义Option覆盖默认值
3. 返回最终业务配置实例
"""
# 初始化标准默认配置
config = JewelryBusinessConfig()
# 遍历所有函数式选项,依次修改配置
opt: JewelryOption
for opt in options:
opt(config)
return config
调用:
python
# encoding: utf-8
# 版权所有 2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Functional Options Pattern 函数式选项模式
# Author : geovindu,Geovin Du 涂聚文.
# IDE : PyCharm 2024.3.6 python 3.11
# os : windows 10
# database : mysql 9.0 sql server 2019, postgreSQL 17.0 Oracle 21c Neo4j
# Datetime : 2026/7/4 20:08
# User : geovindu
# Product : PyCharm
# Project : pydesginpattern
# File : FunctionalOptionsBll.py
from FunctionalOptionsPattern.service import (
get_standard_store_config,
get_luxury_custom_brand_config,
get_wholesale_factory_config,
)
class FunctionalOptionsBll(object):
"""
"""
def demo(self):
"""
:return:
"""
print("=" * 70)
print("【场景1:标准珠宝门店 - 默认配置】")
standard_cfg = get_standard_store_config()
print(f"设计软件:{standard_cfg.design_software}")
print(f"质检标准:{standard_cfg.inspection_standard}")
print(f"基础税率:{standard_cfg.tax_rate}")
print("\n" + "=" * 70)
print("【场景2:高端定制珠宝品牌】")
luxury_cfg = get_luxury_custom_brand_config()
print(f"定制设计开启:{luxury_cfg.custom_design}")
print(f"工艺等级:{luxury_cfg.craft_level}")
print(f"礼盒类型:{luxury_cfg.gift_box_type}")
print(f"VIP服务:{luxury_cfg.vip_service}")
print(f"年度营销预算:{luxury_cfg.advertising_budget:,}")
print("\n" + "=" * 70)
print("【场景3:批发工厂精简配置】")
factory_cfg = get_wholesale_factory_config()
print(f"原料核验关闭:{factory_cfg.material_check}")
print(f"本地部署服务器:{factory_cfg.cloud_server}")
print(f"工厂增值税率:{factory_cfg.tax_rate}")
输出:
