jeudi 10 décembre 2020

using inheritance to work around a bug in a library

Consider the following example:

struct Client
{
    void f()
    {
        s.registerCallback(std::bind(&Client::callback(), this));
        s.foo();
    }

    void callback()
    {
        std::cout << "called back" << std::endl;
    }

    // library class
    Service s;
};

Now, I have found a bug in Service, and want to put in a work-around in my client code. the workaround involves additional processing in f() and callback(). Let's also say that I Service in many parts of my code and I don't want to make the same changes everywhere.

Would a good solution be to simply subclass Service to a new class ServiceWithWorkaround, introduce the work-around logic in the overridden foo() and registerCallback() calls, and replace instances of Service with ServiceWithWorkaround wherever I need the workaround, until the vendor fixes the bug?

Assume that Service has quite an extensive interface and I do not want to use a decorator pattern and implement and forward the entire Service interface. Is there a better pattern that I can use here to solve this problem?

Aucun commentaire:

Enregistrer un commentaire