Перейти к основному содержимому

Сериализация и десериализация

Источник: https://habr.com/ru/post/454290/

В рамках разработки протокола передачи данных нужно сделать сериализацию и десериализацию некоторого типа "User" в строку.

User{
String Name;
Int Age;
}

Можно подумать, что сериализацию и десериализацию нужно делать в отдельных классах:

UserDeserializer{
String deserialize(User){...}
}
UserSerializer{
User serialize(String){...}
}

Так как у каждого из них есть своя ответственность и один повод для изменения.

Но повод для изменения у них общий — "изменение формата сериализации данных". И при изменение этого формата всегда будут меняться и сериализация и десериализация вместе.

Согласно принципу локализации изменений мы должны объединить их в один класс:

UserSerializer{
String deserialize(User){...}
User serialize(String){...}
}

Это избавиляет нас от излишней сложности, и необходимости помнить, что при каждом изменении сериализатора, нужно помнить и о десериализаторе.