ในบางภาษาการเขียนโปรแกรมการสั่งซื้อมีความสำคัญเนื่องจากคุณไม่สามารถใช้สิ่งต่าง ๆ ได้จนกว่าจะมีการประกาศให้ทราบ แต่ จำกัด การนั้นสำหรับภาษาส่วนใหญ่มันไม่สำคัญกับนักแปล ดังนั้นคุณเหลือที่เกี่ยวข้องกับมนุษย์
คำพูดของมาร์ตินฟาวเลอร์ที่ฉันชอบคือ: Any fool can write code that a computer can understand. Good programmers write code that humans can understand.
ดังนั้นฉันจะบอกว่าการจัดลำดับชั้นเรียนของคุณควรขึ้นอยู่กับสิ่งที่ทำให้มนุษย์เข้าใจได้ง่าย
โดยส่วนตัวแล้วฉันชอบการรักษาแบบขั้นตอนที่ Bob Martin ให้ไว้ในClean Code
หนังสือของเขา ตัวแปรสมาชิกที่ด้านบนสุดของคลาสจากนั้นตัวสร้างจากนั้นจึงใช้วิธีอื่นทั้งหมด และคุณสั่งซื้อวิธีการให้ใกล้เคียงกับวิธีการใช้งานในชั้นเรียน (แทนที่จะปล่อยให้สาธารณะทั้งหมดเป็นส่วนตัวแล้วได้รับการป้องกัน) เขาเรียกมันว่าลด "ระยะทางแนวตั้ง" หรืออะไรทำนองนั้น (ไม่มีหนังสือให้ฉันในขณะนี้)
แก้ไข:
แนวคิดพื้นฐานของ "ระยะทางแนวตั้ง" คือคุณต้องการหลีกเลี่ยงการทำให้ผู้คนกระโดดไปมารอบ ๆ ซอร์สโค้ดของคุณเพื่อทำความเข้าใจ หากสิ่งต่าง ๆ เกี่ยวข้องกันพวกเขาควรอยู่ใกล้กันมากขึ้น สิ่งที่ไม่เกี่ยวข้องสามารถแยกออกจากกัน
บทที่ 5 ของClean Code (หนังสือยอดเยี่ยม btw) มีรายละเอียดมากมายเกี่ยวกับวิธีการที่ Mr. Martin แนะนำรหัสการสั่งซื้อ เขาแนะนำว่ารหัสการอ่านควรทำงานได้ดีเหมือนกับการอ่านบทความในหนังสือพิมพ์: รายละเอียดระดับสูงมาก่อน (ที่ด้านบน) และคุณจะได้รับรายละเอียดมากขึ้นเมื่อคุณอ่าน เขาบอกว่า "ถ้าฟังก์ชั่นหนึ่งเรียกอีกฟังก์ชั่นพวกเขาควรจะปิดในแนวตั้งและผู้เรียกควรอยู่เหนือ callee ถ้าเป็นไปได้" นอกจากนี้แนวคิดที่เกี่ยวข้องควรอยู่ใกล้กัน
ดังนั้นนี่คือตัวอย่างที่วางแผนไว้ซึ่งไม่ดีในหลาย ๆ ด้าน (การออกแบบ OO ที่ไม่ดีไม่เคยใช้double
เงิน) แต่แสดงให้เห็นถึงแนวคิด:
public class Employee {
...
public String getEmployeeId() { return employeeId; }
public String getFirstName() { return firstName; }
public String getLastName() { return lastName; }
public double calculatePaycheck() {
double pay = getSalary() / PAY_PERIODS_PER_YEAR;
if (isEligibleForBonus()) {
pay += calculateBonus();
}
return pay;
}
private double getSalary() { ... }
private boolean isEligibleForBonus() {
return (isFullTimeEmployee() && didCompleteBonusObjectives());
}
public boolean isFullTimeEmployee() { ... }
private boolean didCompleteBonusObjectives() { ... }
private double calculateBonus() { ... }
}
มีการจัดระเบียบวิธีการเพื่อให้พวกเขาอยู่ใกล้กับคนที่เรียกพวกเขาทำงานลงมาจากด้านบนของเรา หากเราใส่private
วิธีทั้งหมดข้างล่างนี้public
แล้วคุณจะต้องกระโดดให้มากขึ้นเพื่อติดตามการไหลของโปรแกรม
getFirstName
และgetLastName
เกี่ยวข้องกับแนวคิด (และgetEmployeeId
อาจจะเกินไป) ดังนั้นพวกเขาจึงอยู่ใกล้กัน เราสามารถย้ายพวกมันทั้งหมดลงไปด้านล่าง แต่เราไม่ต้องการเห็นgetFirstName
ที่ด้านบนและgetLastName
ด้านล่าง
หวังว่านี่จะช่วยให้คุณมีแนวคิดพื้นฐาน Clean Code
หากคุณสนใจในรูปแบบของสิ่งนี้ผมขอแนะนำให้อ่าน