Python基于资源的编程框架

背景介绍

之前的文章我介绍了基于服务的开发模式,但是组件的划分和交互常常会出现一些困扰:

  • 组件接口稳定性问题
    组件的接口通常会传递一些数据和参数,但是在实际实现时,会发现可能缺失一些数据,需要修改接口定义
  • 组件接口复杂性问题
    随着接口所需数据变化和增加,接口可能越来越复杂
  • 数据共享困难
    数据只能通过参数传递,导致如果需要某个组件的数据,必须获取此组件对象,导致了对组件的显式依赖

解决方案及应用场景

之前是基于组件的编程模式,在此基础上可以再尝试一下基于资源(或者数据)的编程模式。在这种模式下,组件只需要专注于功能实现即可,不用担心数据传入传出,组件也可以划分得更细粒度。
除了功能组件之外,另外一个需要做的事情就是做好资源管理,数据管理应用场景示意:

s=Store()  # 生成数据存储对象
s.a.b = 100  # 可以采用链式存储数据,方便数据的逻辑上的分类和命名
print(s.a.b)  # 输出100
s.a.b = 88  # 可以修改存储的数据
print(s.a.b)  # 输出88
s.is_valid(s.a.b.c)  # 输出False,没有赋值的数据,被认为是无效的数据

实现源码

'''搞定资源服务'''
class Store:
    '''提供链式存储服务'''
    def __getattr__(self, name:str)->'Store':
        # 当属性不存在时,创建新实例并赋值给当前对象
        new_instance = Store()
        setattr(self, name, new_instance)
        return new_instance
    def is_valid(self, value:object)->bool:
        '''
        判断某个存储值是否是有效的(意思是之前如果没有赋值就直接读取是无效的).
        判断的原理是所有未赋值的属性都自动生成Store实例(为了链式属性调用所必须付出的代价)
        '''
        return not isinstance(value,Store)

以资源为中心模式的优点

  • 有利于组件更细粒度分割,不用担心数据传递
  • 便于从资源视角全局规划,因为应用程序的目的和核心就是数据处理和信息传递
posted @ 2025-05-22 19:47  顺其自然,道法自然  阅读(6)  评论(0)    收藏  举报