对象表示和转换的设计决策

时间:2013-06-19 08:40:46

标签: oop design-patterns

我需要在不同实体之间进行映射,以便在两个系统之间创建同步工具。映射是1:1,我将有大约4-5个不同的实体,我将在它们之间进行映射。

E.g

A1 -> B1
A2 -> B2
A3 -> B3

通过REST API进行JSON通信,我将不得不将对象转换/转换为不同请求的JSON表示。

我希望了解您在以下决定之间的想法:

1)在每个类中,创建一个知道如何转换为其他系统中相应对象的类方法。每个类都知道如何通过实现toJSON,toXML方法来表示自己。

E.g

class A1 {
    static A2 toA2(A1 a1) return { }
    String toJSON() return { }
} 
class A2 {
    static A1 toA1(A2 a2) return { }
    String to JSON() return { }
}

2)直接使用转换器类(Object - > JSON),其方法是将对象转换为另一个系统中的相应JSON。例如。 Converter.entityAtoEntityBJSON(aEntityA)返回实体B系统中实体A的JSON表示。

第二个选项将导致转换器类知道每个实体,而在1)只有两个类知道彼此。此外,如果需要表示XML,则每个类都可以实现toXML()。

您怎么看?

编辑:添加了有关REST API的说明。

1 个答案:

答案 0 :(得分:1)

虽然第一个选项似乎引人注目,但我发现它打破了SRP(单一责任原则),因为它现在有多个改变的理由,每个实体都知道如何将其转换为其他形式因此,每当您更改表示格式或结构时,您都必须修改每个实体。所以我更喜欢第二种选择来集中化变革。我会使用像IMapper这样的接口,它接受一个实体并将其转换为另一个系统中的实体。这类似于大多数ORM将对象存储到数据库中的方式。