ในช่วงโปรเจ็กต์ล่าสุดที่ฉันทำงานอยู่ฉันต้องใช้ฟังก์ชั่นมากมายเช่นนี้:
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);
ดังนั้นฉันต้องการ refactor เพื่อให้มีลักษณะเช่นนี้:
static GPSCoordinate getGPS(GPSCoordinate plane, Angle3D planeAngle, Angle3D gimbalAngle,
PixelCoordinate target, ZoomLevel zoom, PixelSize imageSize)
สิ่งนี้ดูเหมือนว่าฉันจะสามารถอ่านและปลอดภัยได้ดีกว่าวิธีแรก แต่มันสมเหตุสมผลหรือไม่ที่จะสร้างPixelCoordinate
และPixelSize
เรียน? หรือฉันจะดีกว่าเพียงแค่ใช้std::pair<int,int>
สำหรับแต่ละ และมีเหตุผลที่จะมีZoomLevel
ชั้นเรียนหรือฉันควรใช้double
หรือไม่
สัญชาตญาณของฉันที่อยู่เบื้องหลังการใช้คลาสสำหรับทุกสิ่งขึ้นอยู่กับสมมติฐานเหล่านี้:
- หากมีคลาสสำหรับทุกสิ่งมันจะเป็นไปไม่ได้ที่จะส่ง a ไปยัง
ZoomLevel
ตำแหน่งที่Weight
วัตถุถูกคาดหวังดังนั้นมันจึงยากที่จะให้อาร์กิวเมนต์ที่ผิดกับฟังก์ชัน - ในทำนองเดียวกันการดำเนินการที่ผิดกฎหมายบางอย่างจะทำให้เกิดข้อผิดพลาดในการรวบรวมเช่นการเพิ่ม
GPSCoordinate
ไปยังZoomLevel
หรืออย่างอื่นGPSCoordinate
- การดำเนินการทางกฎหมายจะง่ายต่อการเป็นตัวแทนและปลอดภัย เช่นการลบสอง
GPSCoordinate
s จะให้ aGPSDisplacement
อย่างไรก็ตามรหัส C ++ ส่วนใหญ่ที่ฉันเห็นใช้ประเภทดั้งเดิมมากมายและฉันคิดว่าต้องมีเหตุผลที่ดี มันเป็นความคิดที่ดีที่จะใช้วัตถุเพื่ออะไรหรือมีข้อเสียที่ฉันไม่ทราบหรือไม่?