IOManager объединяет разные механизмы хранения и растёт при добавлении каждого нового источника. Полезно отделить бизнес-операции от файлового, сетевого и базового ввода-вывода.
Архитектурные недостатки класса IOManager
IOManager объединяет разные механизмы хранения и растёт при добавлении каждого нового источника. Полезно отделить бизнес-операции от файлового, сетевого и базового ввода-вывода.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Определите, какие проектные проблемы содержатся в следующем фрагменте кода.
class IOManager {
public:
void SaveToFile(const std::string& path);
void ReadFromFile(const std::string& path);
void SaveToDB(const std::string& endpoint);
void ReadFromDB(const std::string& endpoint);
void SaveToServer(const std::string& endpoint);
void ReadFromServer(const std::string& endpoint);
};
Ответ
IOManager объединяет разные механизмы хранения и растёт при добавлении каждого нового источника. Полезно отделить бизнес-операции от файлового, сетевого и базового ввода-вывода.
Выделите небольшие интерфейсы чтения и записи, если их семантика действительно общая, и реализации для конкретных источников. Клиент получает нужную зависимость через конструктор; выбор реализации остаётся в точке сборки приложения.
Однако само количество методов ещё не доказывает плохой дизайн: класс может быть осознанным фасадом. Проблемой становятся смешанные обязанности, неясный формат данных, ошибки и необходимость менять клиента при каждом новом хранилище.