如何将对象分离到DTO和BO?

时间:2015-06-18 07:12:21

标签: json design-patterns serialization architecture dto

我有一个包含数据和行为的旧对象。此对象由JSON序列化,以存储在文件中并在用户之间传输。

现在我想将对象分离为数据传输对象和业务对象,因为我只需要序列化数据,而不需要行为。但我对旧对象的反序列化存在问题。

我怎样才能正确地进行这种分离?

THX!

更新: 所以我有一个包含数据和行为的Class1。我创建了一个Class1DTO并从Class1移动到它的数据。在Class1中我只存储行为。

我想序列化和反序列化Class1DTO,但在旧文件中我已经序列化了Class1(带有数据和行为)。这是我的问题 - 我无法反序列化旧文件,因为在我的prorgam的新版本中,我存储在文件Class1DTO中,而不是Class1。

所以我想改变序列化对象

1 个答案:

答案 0 :(得分:2)

我建议在Class1和Class1DTO之间创建完全分离。

我假设您的Class1代表商业模式(由州和行为组成)。因此,在Class1和Class1DTO中都有重复的属性(数据)是完全可以的,因为它们中的每一个都适合不同的目的。 最好的选择是使用Class1作为业务逻辑(并保存数据),而使用Class1DTO仅表示通过线路传输的数据(在应用程序边界之外)。

通过创建在Class1和Class1DTO(来回)之间进行转换的匹配DTOMapper,您可以轻松解决序列化/反序列化问题。

public class Class1DTOMapper{
    public Class1DTO map(Class1 x){
       return new Class1DTO(...);
    }

    public Class1 mapBack(Class1DTO x){
       return new Class1(...);
    }
}