https://easeresin.com/pattern/doc-ock/