Extract watch operations to Watcher

It improves testability.