Lors d'un récent projet sur lequel j'ai travaillé, j'ai dû utiliser beaucoup de fonctions qui ressemblent à ceci:
static bool getGPS(double plane_latitude, double plane_longitude, double plane_altitude,
double plane_roll, double plane_pitch, double plane_heading,
double gimbal_roll, double gimbal_pitch, double gimbal_yaw,
int target_x, int target_y, double zoom,
int image_width_pixels, int image_height_pixels,
double & Target_Latitude, double & Target_Longitude, double & Target_Height);
Je veux donc le refactoriser pour qu'il ressemble à ceci:
static GPSCoordinate getGPS(GPSCoordinate plane, Angle3D planeAngle, Angle3D gimbalAngle,
PixelCoordinate target, ZoomLevel zoom, PixelSize imageSize)
Cela me semble beaucoup plus lisible et sûr que la première méthode. Mais est-il judicieux de créer PixelCoordinate
et de PixelSize
classer? Ou serais-je mieux d'utiliser simplement std::pair<int,int>
pour chacun. Et est-il sensé d'avoir une ZoomLevel
classe, ou devrais-je simplement utiliser un double
?
Mon intuition derrière l'utilisation de classes pour tout est basée sur ces hypothèses:
- S'il y a des classes pour tout, il serait impossible de passer un
ZoomLevel
dans où unWeight
objet était attendu, il serait donc plus difficile de fournir les mauvais arguments à une fonction - De même, certaines opérations illégales entraîneraient des erreurs de compilation, telles que l'ajout d'un
GPSCoordinate
à unZoomLevel
ou un autreGPSCoordinate
- Les opérations juridiques seront faciles à représenter et à sécuriser. c'est-à-dire que la soustraction de deux
GPSCoordinate
s donnerait unGPSDisplacement
Cependant, la plupart du code C ++ que j'ai vu utilise beaucoup de types primitifs, et j'imagine qu'il doit y avoir une bonne raison à cela. Est-ce une bonne idée d'utiliser des objets pour quoi que ce soit, ou a-t-il des inconvénients que je ne connais pas?