refactor: extract Value interface