当前位置: 首页 > news >正文

python: Handshaking Pattern

项目结构:

珠宝订单管理系统实现握手模式

本文展示了一个珠宝订单管理系统的Python实现,采用了"握手模式"来控制工坊负载。系统包含以下核心组件:

  1. 配置模块:设置工坊最大负载阈值(5)和日志格式
  2. 枚举类型:定义珠宝类型和订单状态
  3. 业务异常:处理工坊过载和订单不存在情况
  4. 日志服务:统一记录系统操作
  5. 领域层:订单实体和工坊类实现握手模式核心逻辑
  6. 应用层:订单服务协调业务流程
  7. 接口层:提供外部调用的API

系统通过"握手模式"确保工坊负载不超过阈值,当工坊满负荷时自动拒绝新订单,完成订单后释放容量可接受新订单,实现了优雅的负载控制机制。

# encoding: utf-8 # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎 # 描述:Handshaking 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/1 20:52 # User : geovindu # Product : PyCharm # Project : pydesginpattern # File : settings.py """全局配置:企业级统一管理""" class Settings: """ """ # 工坊最大负载(握手模式阈值) WORKSHOP_MAX_LOAD = 5 # 日志配置 LOG_FORMAT = "%(asctime)s - %(levelname)s - %(message)s" LOG_DATE_FORMAT = "%Y-%m-%d %H:%M:%S" settings = Settings() # encoding: utf-8 # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎 # 描述:Handshaking 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/1 20:53 # User : geovindu # Product : PyCharm # Project : pydesginpattern # File : jewelry_enums.py """珠宝枚举:可扩展、类型安全""" from enum import Enum class JewelryType(Enum): """ """ DIAMOND_RING = "钻戒" GOLD_BRACELET = "黄金手镯" JADE_PENDANT = "翡翠吊坠" RUBY_NECKLACE = "红宝石项链" PLATINUM_RING = "铂金戒指" SAPPHIRE_EARRING = "蓝宝石耳环" PEARL_NECKLACE = "珍珠项链" class OrderStatus(Enum): """ """ IN_PROGRESS = "生产中" COMPLETED = "已完成" REJECTED = "已拒绝" # encoding: utf-8 # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎 # 描述:Handshaking 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/1 20:53 # User : geovindu # Product : PyCharm # Project : pydesginpattern # File : business_exceptions.py """业务异常:企业级统一异常体系""" class WorkshopOverloadException(Exception): """ 工坊过载异常(握手模式核心) """ pass class OrderNotFoundException(Exception): """ 订单不存在 """ pass # encoding: utf-8 # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎 # 描述:Handshaking 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/1 20:54 # User : geovindu # Product : PyCharm # Project : pydesginpattern # File : logger.py """基础设施:日志服务""" import logging from HandshakingPattern.config.settings import settings class AppLogger: """ """ def __init__(self): logging.basicConfig( format=settings.LOG_FORMAT, datefmt=settings.LOG_DATE_FORMAT, level=logging.INFO ) self.logger = logging.getLogger("jewelry_system") def info(self, msg: str): self.logger.info(msg) def error(self, msg: str): self.logger.error(msg) logger = AppLogger() # encoding: utf-8 # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎 # 描述:Handshaking 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/1 20:55 # User : geovindu # Product : PyCharm # Project : pydesginpattern # File : workshop.py """领域层:珠宝工坊(握手模式实现)""" from dataclasses import dataclass from typing import List from HandshakingPattern.config.settings import settings from HandshakingPattern.enums.jewelry_enums import JewelryType, OrderStatus from HandshakingPattern.exceptions.business_exceptions import WorkshopOverloadException,OrderNotFoundException @dataclass class Order: """ 订单实体 """ order_id: str jewelry_type: JewelryType customer: str status: OrderStatus class JewelryWorkshop: def __init__(self): self.max_load = settings.WORKSHOP_MAX_LOAD self.current_orders: List[Order] = [] def handshake(self) -> bool: """ 握手模式核心方法 负载检查:返回是否可接受新订单 """ return len(self.current_orders) < self.max_load def accept_order(self, order: Order) -> None: """接受订单:必须先握手""" if not self.handshake(): raise WorkshopOverloadException( f"工坊已满负荷 {len(self.current_orders)}/{self.max_load}" ) self.current_orders.append(order) def complete_order(self, order_id: str) -> Order: """完成订单,释放负载""" for order in self.current_orders: if order.order_id == order_id: order.status = OrderStatus.COMPLETED self.current_orders.remove(order) return order raise OrderNotFoundException(f"订单{order_id}不存在") def get_status(self): return { "max_load": self.max_load, "current_load": len(self.current_orders), "orders": [o.__dict__ for o in self.current_orders] } # encoding: utf-8 # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎 # 描述:Handshaking 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/1 20:57 # User : geovindu # Product : PyCharm # Project : pydesginpattern # File : order_service.py """应用层:订单服务(编排业务,不实现核心逻辑)""" from HandshakingPattern.domain.workshop import JewelryWorkshop, Order from HandshakingPattern.enums.jewelry_enums import OrderStatus from HandshakingPattern.infrastructure.logger import logger class OrderService: """ """ def __init__(self, workshop: JewelryWorkshop): self.workshop = workshop def create_order(self, order_id: str, jewelry_type, customer: str) -> str: """ :param order_id: :param jewelry_type: :param customer: :return: """ try: order = Order( order_id=order_id, jewelry_type=jewelry_type, customer=customer, status=OrderStatus.IN_PROGRESS ) self.workshop.accept_order(order) msg = f"✅ 订单{order_id} 接受成功 | 客户:{customer} | 品类:{jewelry_type.value}" logger.info(msg) return msg except Exception as e: msg = f"❌ 订单{order_id} 被拒绝:{str(e)}" logger.error(msg) return msg def finish_order(self, order_id: str) -> str: """ :param order_id: :return: """ try: order = self.workshop.complete_order(order_id) msg = f"🏆 订单{order_id} 已完成 | 客户:{order.customer}" logger.info(msg) return msg except Exception as e: logger.error(str(e)) return str(e) # encoding: utf-8 # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎 # 描述:Handshaking 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/1 20:59 # User : geovindu # Product : PyCharm # Project : pydesginpattern # File : workshop_api.py """接口层:对外提供服务入口""" from HandshakingPattern.application.order_service import OrderService from HandshakingPattern.domain.workshop import JewelryWorkshop class WorkshopAPI: """ """ def __init__(self): # 依赖注入 self.workshop = JewelryWorkshop() self.order_service = OrderService(self.workshop) def submit_order(self, order_id, jewelry_type, customer): """ :param order_id: :param jewelry_type: :param customer: :return: """ return self.order_service.create_order(order_id, jewelry_type, customer) def complete_order(self, order_id): """ :param order_id: :return: """ return self.order_service.finish_order(order_id) def get_workshop_status(self): """ :return: """ return self.workshop.get_status()

调用:

# encoding: utf-8 # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎 # 描述: # 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/1 21:01 # User : geovindu # Product : PyCharm # Project : pydesginpattern # File : HandshakingBll.py from HandshakingPattern.api.workshop_api import WorkshopAPI from HandshakingPattern.enums.jewelry_enums import JewelryType class HandshakingBll(object): """ """ def demo(self): """ :return: """ print("===== 珠宝企业级系统启动(握手模式)=====\n") api = WorkshopAPI() # 模拟订单 orders = [ ("ORD001", JewelryType.DIAMOND_RING, "张先生"), ("ORD002", JewelryType.GOLD_BRACELET, "李女士"), ("ORD003", JewelryType.JADE_PENDANT, "王小姐"), ("ORD004", JewelryType.RUBY_NECKLACE, "刘先生"), ("ORD005", JewelryType.PLATINUM_RING, "陈女士"), ("ORD006", JewelryType.SAPPHIRE_EARRING, "赵先生"), ("ORD007", JewelryType.PEARL_NECKLACE, "孙女士"), ] print("----- 接收客户订单 -----") for oid, jt, cust in orders: print(api.submit_order(oid, jt, cust)) print("\n----- 完成2个订单 -----") print(api.complete_order("ORD001")) print(api.complete_order("ORD002")) print("\n----- 重新接收被拒订单 -----") print(api.submit_order("ORD006", JewelryType.SAPPHIRE_EARRING, "赵先生")) print(api.submit_order("ORD007", JewelryType.PEARL_NECKLACE, "孙女士")) print("\n----- 最终工坊状态 -----") print(api.get_workshop_status())

输出

http://www.jsqmd.com/news/1106047/

相关文章:

  • 电池充放电测试该怎么测?从分体拼方案到回馈一体机,这篇文章讲透了
  • OpenHarmony 英语学习 App 实战:悬浮导航栏、沉浸光感与全新交互体验
  • 【信息科学与工程学】【制造工程】第八十三篇 计算机系统集成制造01
  • 字节豆包AI编程助手扩展:深度解析其代码能力边界与实战表现
  • EM3080-W与PIC32MZ的嵌入式条形码解码系统设计
  • 什么是数字工厂全要素智造中枢与适用于哪种企业
  • LeetCode 23.合并K个升序链表
  • Android 7系统日志(四)日志写入接口—Java层与Native层
  • Codex 插件生态全景:从官方工具到社区神器
  • 工程化应用基础设施:可观测性要覆盖 提示词、检索和执行
  • HBM Predictor安装与配置教程:简单5步搭建预测环境
  • Visa、Stripe等140余家机构联合推出Open USD稳定币,剑指Tether
  • 第92题 IGBT模块封装用高可靠铝线键合与铜线键合
  • 2026手机证件照制作工具实操指南:免费无水印软件梳理与收费坑避雷
  • Windows安卓应用安装神器:APK Installer完全指南 - 3分钟掌握跨平台应用管理
  • 年入100亿压缩机龙头IPO!1.66亿诉讼案未决,应收账款质量恶化
  • 让大模型跑在小芯片上:工程挑战比口号更硬
  • 番茄小说下载器终极指南:三分钟打造个人离线图书馆的完整教程
  • 记录:2026.7.1
  • 告别复杂配置!Claude Code完整安装指南,小白也能10分钟上手(Linux/WSL2)
  • 从 Hermes Agent 到 Harness 工程:AI Agent 落地,靠的不只是大模型
  • 单帧像素推演三维空间,SpaceOS联动Pixel2Geo打通单画面实景重建全链路
  • YOLOv11 改进 - C2PSA C2PSA融合EDFFN高效判别频域前馈网络(CVPR 2025):频域筛选机制增强细节感知,优化复杂场景目标检测
  • novel-downloader:三步搞定网络小说永久保存的终极指南
  • ChatGPT Plus / Pro 付款后没看到结果,先查这几步
  • 原生Signals正式落地、管道操作符终结“嵌套地狱”、WebNN调用NPU算力——4个让前端代码“减重”50%的ES2026特性
  • 孩子确诊自闭症/多动症后该找谁?一份给迷茫家长的专业参考指南
  • 软件设计周期
  • 卡梅德生物科普:CD70(TNFSF7)的免疫共刺激机制与研究应用
  • 基于SpringBoot+Vue的日常办公用品直售推荐系统管理系统设计与实现【Java+MySQL+MyBatis完整源码】