Назад к задачам
Junior — Senior
10

Проблема LSP при добавлении нового типа хранилища

Получайте помощь с лайвкодингом в реальном времени с Sobes Copilot
Условие задачи

В системе есть иерархия интерфейса IStorage и его реализации. Требуется ввести новый тип хранилища, при этом один из методов (Save или Read) может быть неактуален для этой реализации. Если в такой ситуации метод будет генерировать исключение, это приводит к нарушению принципа подстановки Лисков (LSP). Опишите, в чём заключается ошибка такого подхода и предложите изменения в архитектуре, позволяющие сохранить корректность LSP.

class IStorage {
public:
    virtual void Save(const std::string& path) = 0;
    virtual void Read(const std::string& path) = 0;
};

class FileStorage : public IStorage {
public:
    void Save(const std::string& path) override;
    void Read(const std::string& path) override;
};

class DatabaseStorage : public IStorage {
public:
    void Save(const std::string& path) override;
    void Read(const std::string& path) override;
};

class RemoteStorage : public IStorage {
public:
    void Save(const std::string& path) override;
    void Read(const std::string& path) override;
};