在类上创建静态工厂方法是否可以接受?

时间:2017-02-07 17:06:27

标签: php json oop methods factory

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

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

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

我可以想到四种方式......

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

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

1 个答案:

答案 0 :(得分:1)

  

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

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

  

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

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

  

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

我个人认为这是对构造函数的笨拙使用。像JSON验证之类的东西需要抛出异常。

  

4)使用工厂方法将课程转变为服务。

创建工厂是最具扩展性的前进方式。如果您有多个JSON格式和要映射的对象,请在线下思考。这个中心类将允许您选择正确的映射并随时间处理更改。单元测试也很容易。