For Serial protocol, Why need data field in dynamic array or queue instead of normal vector in transaction class?

hi…
as shown below, I give two options for transection which one batter for a serial protocol like I2S or I2C or any other? why?
1)
define size 32 class trasaction; rand [size-1:0]r_data;
rand [size-1:0]l_data[]; endclass 2) define size 32
class trasaction;
rand [size-1:0]r_data; rand [size-1:0]l_data;
endclass

//comman generator class
class gen;
transaction tr;

task run;
repeat(n) begin
tr = new;
void’(tr.randomize);
end
endtask
endclass