【问题标题】:Is it acceptable to create a static factory method on a class? [closed]在类上创建静态工厂方法是否可以接受? [关闭]
【发布时间】:2017-06-25 01:12:16
【问题描述】:

我有一个类,它的实例是一个以标准化格式表示消息的对象。这些实例最终会作为 JSON 对象输出,以便它们可以在进程之间传输。

该类有一些非常有用的方法,我使用它们来验证和控制消息,而无需深入研究对象结构。当我创建消息并将其发送出去时,这很好而且很花哨,但是当我收到 JSON 对象时,它只包含数据,没有这些有用的方法。

将这些传入的 JSON 对象映射到类实例的最佳方法是什么?

我能想到四种方法……

1) 向接受 JSON 字符串并生成该类的新实例的类添加一个静态方法。
2) 向接受 JSON 字符串并将 JSON 对象映射到该实例的类添加一个方法。
3) 在构造函数中有一个可选参数,它接受 JSON 字符串并将其映射到构造时的实例。
4) 使用工厂方法将类变成服务。

我很想做 3,但问题是如果对象的格式不正确等,我无法返回反馈。

【问题讨论】:

    标签: php json oop methods factory


    【解决方案1】:

    1) 向接受 JSON 字符串并生成该类的新实例的类添加一个静态方法。

    随着功能的变化,这将使代码更难进行单元测试和扩展。见unit testing and Static methods

    2) 向接受 JSON 字符串并将 JSON 对象映射到该实例的类添加一个方法。

    这是个好主意。这可能与#4 结合使用。如果您想支持多个对象/JSON 格式,单独实现这一点可能会变得乏味。

    3) 在构造函数中有一个可选参数,它接受 JSON 字符串并将其映射到构造时的实例。

    我个人觉得构造函数的使用很尴尬。 JSON 验证之类的东西需要抛出异常。

    4) 使用工厂方法将类变成服务。

    创建工厂是最具扩展性的前进方式。如果您有多种 JSON 格式和对象要映射到,请考虑一下。这个中心类可以让你选择正确的映射并随着时间的推移处理变化。单元测试也很容易。

    【讨论】:

      猜你喜欢
      • 2010-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-26
      • 2014-01-01
      • 1970-01-01
      • 2011-12-12
      相关资源
      最近更新 更多