【问题标题】:preserve backward compatibility without a separate class在没有单独的类的情况下保持向后兼容性
【发布时间】:2015-04-16 22:18:11
【问题描述】:

假设有一个名为Animal 的类接收包含动物属性(typecolorsize)的请求,然后将其序列化并存储在数据库中。随着时间的推移,动物的属性会发生变化。添加了一些东西,现在我们还有location

会有一个版本标志,可用于随时分支请求。

您将如何调整动物类以使其既能处理旧请求又能处理新请求?这有什么设计模式吗?

【问题讨论】:

    标签: oop design-patterns language-agnostic backwards-compatibility ooad


    【解决方案1】:

    我认为您不需要特定的设计模式来实现这一点。您可以尝试以下两种方法并评估哪一种更适合您的情况:

    • 用额外的参数位置重载当前请求方法,如Animal::Request(type,color,size,location),这样你的类就可以同时处理这两个。更多关于重载here
    • 例如,为您现有的 Request 方法添加一个默认位置参数,并让它将旧的 type,color,size 调用视为 type,color,size,'' 调用。更多关于默认参数here

    【讨论】:

      【解决方案2】:

      有时您无法使某些东西向后兼容,这取决于您的域逻辑(规则)。

      如果像“位置”这样的新属性有一些默认值并且您对此感到满意,那么您可以处理旧请求,但如果您的应用程序需要该值才能正常工作,那么旧请求将无效。

      【讨论】:

        猜你喜欢
        • 2012-08-12
        • 1970-01-01
        • 2015-07-17
        • 1970-01-01
        • 1970-01-01
        • 2019-08-29
        • 1970-01-01
        • 2011-07-25
        • 2011-11-10
        相关资源
        最近更新 更多