add dto and encapsulate entity in impl.
same as before