add abstract factory to DAO layer