Right now I'm working with some code that combines state and operations.It looks something like this (note: doesn't actually deal with Cars/Trucks. I'm abstracting the business logic here, and apologize in advance that the analogy doesn't entirely make sense)TruckImpl {    // Fields/Properties    int Mileage    bool MissionAccomplished    // ... and many, many more    // Constructor    TruckImpl TruckImpl(IRentalAgreement agreement)    // methods    void Drive() {        // Sets a whole bunch of fields/properties which are subsequently used to make decisions in Park()        GetCarFromDealer()        Haul()    }    void GetCarFromDealer()    void Haul()    // Return to rental company if done, otherwise park at home    void Park()}CarImpl {    // Fields    int Mileage    bool MissionAccomplished    // Constructor    CarImpl CarImpl(IRentalAgreement agreement)    // methods    // Sets a whole bunch of fields/properties which are subsequently used to make decisions in Park()    void Drive() {        // Sets a whole bunch of fields/properties which are subsequently used to make decisions in Park()        GetCarFromDealer()        Race()    }    void GetCarFromDealer()    void Race()    // Return to rental company if done, otherwise park at home        void Park()}It's used in some code that looks similar to the following pseudocode:RentalVehicleHandler {    IVehicleImplFactory factory;    Handle(IRentalAgreement agreement) {        impl = factory.Create(agreement)        impl.Drive()        impl.Park()    }}Main() {    while(true) {    var agreements = GetAgreements();     foreach(var agreement in agreements) {        handler.Handle(agreement)    }}In the above code, we're getting batches of RentalAgreements, but still processing each of them individually. Now, I want to handle Cars and Trucks slightly separately. For Trucks, I will still Drive() then Park() each individually. For Cars, I want to GetCarFromDealer() individually, but then Race() the entire batch of cars at once before Parking them. I might want to do something similar for Trucks in the future, but maybe not.I thought that it would be helpful to separate my state from my implementation like below: (to start, no batching-related stuff added yet):// One per rental agreementRentalVehicle {    #Properties    RentalAgreement agreement    int Mileage    bool MissionAccomplished    //(...all of the TruckImpl propertiies?)}// Can handle any number of RentalAgreements, maybe multipleCarDriver {    RentalVehicle Drive(RentalVehicle vehicle)    RentalVehicle Park(RentalVehicle vehicle)}TruckDriver {    RentalVehicle Drive(RentalVehicle vehicle)    RentalVehicle Park(RentalVehicle vehicle)}Is this a helpful/reasonable thing to do? Or is it just a bunch of extra work that will gain me no advantage?  I think it will help me both with the problem at hand and help me with further refactoring, but I've also tried a few other things that were dead-ends and I don't want to spend a bunch of time refactoring this for no reason.
Should I try to separate state from implementation?
refactoring;state