I have an aggregate root "Car" A car has a list of value objects "Wheels" containing "Wheel" objects. Since a car should not exist without wheels (at least according to our business logic), in order to construct a car is this valid in proper domain driven design:
double radius = 17.0;
List<Wheel> carWheels = new List<Wheel>();
carWheels.add(new Wheel(radius));
Car aCar = new Car(carWheels);
My question is basically, is it good practice to instantiate value objects outside of an aggregate root in order to construct an aggregate root (passing value objects in constructor). I don't want to create an aggregate root in an invalid state and would like to follow best practices. If the above code is not best practice, how should it be done?