second alpha version with refactor
 1. still without any testl 
 2. fix all error class
 3. unify class name