three interface module pattern