Refactor transaction model with abstract object instead or common transaction