refactor the structure. divide the project into three big module.