refactor Action as abstract