refactor dao impl