IMO adding and removing carriages to a train should fall under the trains domain. thus, type Train should have the methods AddCarriage() and RemoveCarriage(). how you create the carriages i think would be more preference, but should probably fall under the Carriage type.