Допустим есть класс, который записывает свое состояние на диск, а при инициализации подгружает обратно. Логично делать это в конструкторе. Но с точки зрения unit тестов, это криво. Если я выношу это в метод initialize, то я обязываю внешний код дергать еще и его, потом это плодит разные статусы initializing итд итп.
Правильно ли я понимаю, что хорошим дизайном будет следующее:
какая-то фабрика, которая отвечает за создание и инициализацию класса
объект "LastStateInfo"
в класс добавляется дополнительный конструктор, который принимает LastStateInfo
Есть ли какие-то типовые подходы? Как это называется? Как это можно нагуглить?
Ответ
Для сохранения состояния есть паттерн Хранитель (Momento). Сам класс не должен реализовывать алгоритм сохранения/восстановления состояния (обратное нарушает принципы SOLID, а именно SRP). Тогда и проблем с юнит-тестами не будет. Вместо зависимостей подсуните моки/стабы.
Комментариев нет:
Отправить комментарий