これはやりすぎではないのか?という話

依存関係にあるクラス(以下の例だとLock)をMock置き換え可能に保ちたくて、ファクトリー(LockFactory)をインジェクションしてみました。

class Lock {
public:
    virtual ~Lock() = 0;
};
class LockFactory {
public:
    virtual Lock * create(const char * name) = 0;
};

class Client {
public:
    Client(LockFactory * pLockFactory)
     : m_pLockFactory(pLockFactory) {
    }
    void doSomethingWithLock() {
        const std::auto_ptr< Lock > pLock(m_pLockFactory->create("hogehoge"));
        ...
    }
private:
    LockFactory * m_pLockFactory;
};

今日的には単体テスト可能性が最優先と思えるので、だとしたらこうかな。でも、大げさすぎるような気もする。さて...