Durante un recente progetto a cui ho lavorato, ho dovuto utilizzare molte funzioni che assomigliano a questo:
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);
Quindi voglio refactoring per assomigliare a questo tipo:
static GPSCoordinate getGPS(GPSCoordinate plane, Angle3D planeAngle, Angle3D gimbalAngle,
PixelCoordinate target, ZoomLevel zoom, PixelSize imageSize)
Questo mi sembra molto più leggibile e sicuro del primo metodo. Ma ha senso creare PixelCoordinate
e PixelSize
classi? O starei meglio usando solo std::pair<int,int>
per ciascuno. E ha senso avere una classe ZoomLevel
o dovrei semplicemente usare un double
?
La mia intuizione dietro l'uso delle classi per tutto è basata su questi presupposti:
- Se ci sono classi per tutto, sarebbe impossibile passare un
ZoomLevel
in cui era previsto un oggettoWeight
, quindi sarebbe più difficile fornire gli argomenti sbagliati a una funzione - Analogamente, alcune operazioni illegali potrebbero causare errori di compilazione, come aggiungere
GPSCoordinate
aZoomLevel
o un altroGPSCoordinate
- Le operazioni legali saranno facili da rappresentare e dattiloscritte. cioè sottraendo due% di
GPSCoordinate
s si otterrebbe unGPSDisplacement
Tuttavia, la maggior parte del codice C ++ che ho visto utilizza molti tipi primitivi, e immagino ci debba essere una buona ragione per quello. È una buona idea usare gli oggetti per qualsiasi cosa, o ha aspetti negativi di cui non sono a conoscenza?