python实现"对修改封闭, 对扩展开放"

发布时间 2023-08-22 15:35:32作者: 顺其自然,道法自然

对修改封闭, 对扩展开放是架构设计的基本原则. 意思是如果程序增加新的功能, 则不应该修改老的代码, 只需要增加新的代码就可以了, 这样可以避免对老功能的破坏, 新增功能如果有问题, 也很容易回退.
python语言如何实现这个设计目标呢?
可以使用我们之前提到的消息机制来实现: python基于消息的编程

  • 关于特性
    我们定义一个特性类, 只要继承自此类, 就会自动生成此特性的对象, 特性就会自动加载进系统, 不用修改已有程序代码. 如下所示:
from Message import *
class Feature: pass
class Test1(Feature):
    def __init__(self):
        sub('Test1', lambda:print('recv msg'))	# 订阅消息
class Test2(Feature):
    def __init__(self):
        pub('Test1')	# 发布消息
def Run():
    '''运行程序'''
    for subclass in Feature.__subclasses__(): subclass()
Run()

系统会自动实例化继承自Feature的类, 这样如果增加新特性, 只需要增加一个继承自Feature的类即可.

  • 消息机制
    如上例所示, 特性Test1和Test2并不直接依赖, 而是共同依赖于特定消息, 每一个特性可以订阅一些消息, 也可以发布消息, 这样只需要保持消息的稳定性和兼容性, 就最大限度的降低了模块间的耦合性.