ฉันสังเกตเห็นบางอย่างในรหัสของฉันในโครงการต่าง ๆ ที่ดูเหมือนว่ากลิ่นรหัสให้ฉันและสิ่งที่ไม่ดีที่จะทำ แต่ฉันไม่สามารถจัดการกับมัน
ในขณะที่พยายามเขียน "รหัสสะอาด" ฉันมักจะใช้วิธีส่วนตัวมากเกินไปเพื่อให้อ่านรหัสได้ง่ายขึ้น ปัญหาคือรหัสนั้นสะอาดกว่า แต่ก็ยากกว่าในการทดสอบ (ใช่ฉันรู้ว่าฉันสามารถทดสอบวิธีการส่วนตัว ... ) และโดยทั่วไปดูเหมือนว่านิสัยที่ไม่ดีสำหรับฉัน
นี่คือตัวอย่างของคลาสที่อ่านข้อมูลบางอย่างจากไฟล์. csv และส่งคืนกลุ่มลูกค้า (วัตถุอื่นที่มีเขตข้อมูลและแอตทริบิวต์ต่าง ๆ )
public class GroupOfCustomersImporter {
//... Call fields ....
public GroupOfCustomersImporter(String filePath) {
this.filePath = filePath;
customers = new HashSet<Customer>();
createCSVReader();
read();
constructTTRP_Instance();
}
private void createCSVReader() {
//....
}
private void read() {
//.... Reades the file and initializes the class attributes
}
private void readFirstLine(String[] inputLine) {
//.... Method used by the read() method
}
private void readSecondLine(String[] inputLine) {
//.... Method used by the read() method
}
private void readCustomerLine(String[] inputLine) {
//.... Method used by the read() method
}
private void constructGroupOfCustomers() {
//this.groupOfCustomers = new GroupOfCustomers(**attributes of the class**);
}
public GroupOfCustomers getConstructedGroupOfCustomers() {
return this.GroupOfCustomers;
}
}
ในขณะที่คุณสามารถเห็นชั้นเรียนมีเพียงตัวสร้างที่เรียกวิธีการส่วนตัวบางอย่างเพื่อให้งานเสร็จฉันรู้ว่ามันไม่ใช่วิธีปฏิบัติที่ดีโดยทั่วไป แต่ฉันชอบที่จะสรุปการทำงานทั้งหมดในชั้นเรียนแทนที่จะทำให้วิธีการสาธารณะ ลูกค้าควรใช้วิธีนี้:
GroupOfCustomersImporter importer = new GroupOfCustomersImporter(filepath)
importer.createCSVReader();
read();
GroupOfCustomer group = constructGoupOfCustomerInstance();
ฉันชอบสิ่งนี้เพราะฉันไม่ต้องการใส่โค้ดที่ไม่มีประโยชน์ในโค้ดด้านข้างของลูกค้ารบกวนคลาสของลูกค้าพร้อมรายละเอียดการใช้งาน
ดังนั้นนี่เป็นนิสัยที่ไม่ดีจริง ๆ หรือ ถ้าใช่ฉันจะหลีกเลี่ยงได้อย่างไร โปรดทราบว่าข้างต้นเป็นเพียงตัวอย่างง่ายๆ ลองนึกภาพสถานการณ์เดียวกันที่เกิดขึ้นในสิ่งที่ซับซ้อนขึ้นเล็กน้อย