我有一个包含数据和行为的旧对象。此对象由JSON序列化,以存储在文件中并在用户之间传输。
现在我想将对象分离为数据传输对象和业务对象,因为我只需要序列化数据,而不需要行为。但我对旧对象的反序列化存在问题。
我怎样才能正确地进行这种分离?
THX!
更新: 所以我有一个包含数据和行为的Class1。我创建了一个Class1DTO并从Class1移动到它的数据。在Class1中我只存储行为。
我想序列化和反序列化Class1DTO,但在旧文件中我已经序列化了Class1(带有数据和行为)。这是我的问题 - 我无法反序列化旧文件,因为在我的prorgam的新版本中,我存储在文件Class1DTO中,而不是Class1。
所以我想改变序列化对象
答案 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(...);
}
}