in reply to Class::MethodMaker dynamic fields

That's because use Class::MethodMaker executed before @fields = qw(id name). See details in perlmod. Just list fields directly in use statement:

use Class::MethodMaker get_set => [ qw(id name) ], new => "new";

P.S.: also http://www.effectiveperlprogramming.com/blog/1068