python: Fail-Fast Pattern

发布时间:2026/7/1 2:36:43
python: Fail-Fast Pattern 项目结构# encoding: utf-8 # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看言語成了邀功盡責的功臣還需要行爲每日來值班嗎 # 描述Fail-Fast 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/6/30 7:03 # User : geovindu # Product : PyCharm # Project : pydesginpattern # File : fail_fast.py class ResourceCheckFailedError(Exception): 快速失败资源不可用 pass # encoding: utf-8 # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看言語成了邀功盡責的功臣還需要行爲每日來值班嗎 # 描述Fail-Fast 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/6/30 7:04 # User : geovindu # Product : PyCharm # Project : pydesginpattern # File : inventory_repo.py class InventoryRepository: def __init__(self): self.inventory { DIA001: 5, DIA002: 0, GOLD001: 20 } def get_stock(self, product_id: str)-int|None: :param product_id: :return: return self.inventory.get(product_id, -1) def deduct_stock(self, product_id: str, quantity: int)-int|None: :param product_id: :param quantity: :return: self.inventory[product_id] - quantity # encoding: utf-8 # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看言語成了邀功盡責的功臣還需要行爲每日來值班嗎 # 描述Fail-Fast 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/6/30 7:05 # User : geovindu # Product : PyCharm # Project : pydesginpattern # File : external_services_repo.py class ExternalServices: def __init__(self): self.inventory_service True self.payment_gateway True self.quality_inspection True self.invoice_service True # encoding: utf-8 # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看言語成了邀功盡責的功臣還需要行爲每日來值班嗎 # 描述Fail-Fast 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/6/30 7:05 # User : geovindu # Product : PyCharm # Project : pydesginpattern # File : validation_service.py from FailFastPattern.exceptions.fail_fast import ResourceCheckFailedError from FailFastPattern.repository.external_services_repo import ExternalServices from FailFastPattern.repository.inventory_repo import InventoryRepository class ValidationService: def __init__( self, inventory_repo: InventoryRepository, ext_services: ExternalServices ): self.inventory_repo inventory_repo self.ext_services ext_services def fail_fast_check(self, customer_id: str, product_id: str, quantity: int): Fail-Fast 核心全部资源一次性检查不满足立即失败 :param customer_id: :param product_id: :param quantity: :return: # 1. 顾客检查 if not customer_id or len(customer_id) 3: raise ResourceCheckFailedError(顾客信息无效) # 2. 商品存在检查 stock self.inventory_repo.get_stock(product_id) if stock 0: raise ResourceCheckFailedError(f商品 {product_id} 不存在) # 3. 库存足够检查 if stock quantity: raise ResourceCheckFailedError(f商品 {product_id} 库存不足) # 4. 外部服务检查 if not self.ext_services.inventory_service: raise ResourceCheckFailedError(库存服务不可用) if not self.ext_services.payment_gateway: raise ResourceCheckFailedError(支付网关不可用) if not self.ext_services.quality_inspection: raise ResourceCheckFailedError(质检系统不可用) if not self.ext_services.invoice_service: raise ResourceCheckFailedError(发票系统不可用) # encoding: utf-8 # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看言語成了邀功盡責的功臣還需要行爲每日來值班嗎 # 描述Fail-Fast 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/6/30 7:06 # User : geovindu # Product : PyCharm # Project : pydesginpattern # File : order_service.py from FailFastPattern.exceptions.fail_fast import ResourceCheckFailedError from FailFastPattern.repository.external_services_repo import ExternalServices from FailFastPattern.repository.inventory_repo import InventoryRepository from FailFastPattern.service.validation_service import ValidationService from ParallelismPattern.models.entities import Order class OrderService: def __init__( self, validation_service: ValidationService, inventory_repo: InventoryRepository, ext_services: ExternalServices ): self.validation validation_service self.inventory_repo inventory_repo self.ext_services ext_services def create_order(self, customer_id: str, product_id: str, quantity: int)-dict: :param customer_id: :param product_id: :param quantity: :return: try: # 第一步快速失败检查 self.validation.fail_fast_check(customer_id, product_id, quantity) # 检查通过执行业务 self.inventory_repo.deduct_stock(product_id, quantity) return { order_id: ORD-JWL-9999, product_id: product_id, quantity: quantity, remaining_stock: self.inventory_repo.get_stock(product_id), status: success } except ResourceCheckFailedError as e: raise e # encoding: utf-8 # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看言語成了邀功盡責的功臣還需要行爲每日來值班嗎 # 描述Fail-Fast 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/6/30 7:06 # User : geovindu # Product : PyCharm # Project : pydesginpattern # File : order_controller.py from FailFastPattern.service.order_service import OrderService class OrderController: def __init__(self, order_service: OrderService): self.order_service order_service def create_jewelry_order(self, customer_id: str, product_id: str, quantity: int)-dict: :param customer_id: :param product_id: :param quantity: :return: try: result self.order_service.create_order(customer_id, product_id, quantity) return {success: True, data: result} except Exception as e: return {success: False, error: f快速失败: {str(e)}}调用# encoding: utf-8 # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看言語成了邀功盡責的功臣還需要行爲每日來值班嗎 # 描述Fail-Fast 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/6/30 7:15 # User : geovindu # Product : PyCharm # Project : pydesginpattern # File : FailFastBll.py from FailFastPattern.api.order_controller import OrderController from FailFastPattern.repository.external_services_repo import ExternalServices from FailFastPattern.repository.inventory_repo import InventoryRepository from FailFastPattern.service.order_service import OrderService from FailFastPattern.service.validation_service import ValidationService class FailFastBll(object): def demo(self): :return: # 初始化依赖 inventory_repo InventoryRepository() ext_services ExternalServices() validation_service ValidationService(inventory_repo, ext_services) order_service OrderService(validation_service, inventory_repo, ext_services) controller OrderController(order_service) print( 场景1正常下单 ) print(controller.create_jewelry_order(C1001, DIA001, 1)) print(\n 场景2库存不足 ) print(controller.create_jewelry_order(C1001, DIA002, 1)) print(\n 场景3顾客无效 ) print(controller.create_jewelry_order(C, DIA001, 1)) print(\n 场景4支付服务挂了 ) ext_services.payment_gateway False print(controller.create_jewelry_order(C1001, DIA001, 1))输出