ใน Java ผู้ช่วยส่วนตัวควรไปด้านบนหรือด้านล่างวิธีสาธารณะ? [ปิด]


24

ฉันสังเกตเห็นว่าผู้ร่วมงานกับฉันมีแนวปฏิบัติที่ตรงกันข้ามเกี่ยวกับการเรียงลำดับวิธีการในคลาส Java ของเรา หนึ่งในเราเริ่มเรียนด้วยวิธีการสาธารณะที่สำคัญแล้วให้ผู้ช่วยส่วนตัวทั้งหมดหลังจากนั้น อีกคนหนึ่งของเราทำให้แน่ใจว่าวิธีการสาธารณะเป็นจุดสิ้นสุด

เห็นได้ชัดว่านี่เป็นเพียงปัญหาสไตล์และไม่มีคำตอบที่ถูกต้อง อย่างไรก็ตามก่อนที่เราจะตัดสินใจว่าเรื่องนี้เป็นอีกการต่อสู้ของ Yooks vs Zooks และเลือกอย่างใดอย่างหนึ่งโดยพลการฉันสงสัยว่าบางทีอาจจะมีคำแนะนำสไตล์ Java มาตรฐานหรือเหตุผลบางประการที่ทำไมวิธีหนึ่งดีกว่าวิธีอื่น


13
มันไม่สำคัญ พลิกเหรียญ. เลือกหนึ่ง. ติดกับมัน.

อาจเป็นไปได้ซ้ำกับตำแหน่งวิธีใช้ตัวช่วย
Kilian Foth

@KilianFoth - คำถามนี้ถูกถามเมื่อ 3 เดือนก่อนและมีคำตอบเพิ่มเติม นั่นจะไม่ทำให้คำถามเป็นคำถามซ้ำกับคำถามนี้หรือ
Brandon Yarbrough

คำตอบ:


25

แม้ว่ามันจะเป็นเรื่องปกติ แต่คุณก็ควรพยายามที่จะปฏิบัติตามมาตรฐานทั่วไปภายในองค์กรของคุณ ดังนั้นสิ่งที่คุณตัดสินใจเลือกมาตรฐานและนำไปใช้ในระดับสากล

สำหรับการเลือกถ้าคุณทำตามคำแนะนำที่มีให้ในClean Codeคุณจะสามารถอ่านไฟล์จากบนลงล่างเช่นบทความในหนังสือพิมพ์ซึ่งโดยปกติแล้วจะแนะนำวิธีการช่วยเหลือที่ปรากฏขึ้นหลังจากวิธีการที่พวกเขาเป็น การช่วยเหลือ สิ่งนี้จะนำไปสู่การอ่านสูงสุดของโครงสร้างรหัส ดังนั้นหากคุณจะมี

public void doSomething()
{
     helpMe();
     helpMeAgain();
}

ไฟล์ของคุณจะถูกจัดโครงสร้างเป็น

public void doSomething() { }
private void helpMe() { }
private void helpMeAgain() { }

ผลข้างเคียงอีกอย่างของการทำเช่นนี้คือคุณค้นพบผู้ช่วยเหลือของคุณมีผู้ช่วยเหลือของตัวเองและมันช่วยให้คุณทราบว่าสิ่งที่คุณมีคือการใช้ชีวิตแบบคลาสอื่นในไฟล์ของคุณและคุณสามารถ refactor รวมกลุ่มกันแล้วตามลำดับ แต่นั่นเป็นประโยชน์รอง


ดีใจที่คุณพูดแบบนี้หรืออย่างอื่นฉันจะมี ฉันถาม Bob Martin ว่าเขาสั่งสิ่งต่าง ๆ ได้อย่างไรหาก 2 วิธีแต่ละวิธีใช้วิธีที่ 3 ในกรณีนั้นเขาวางอันดับที่ 3 ลงไปอีกสองอัน
Daniel Kaplan

1
ตัวอย่างของคุณไม่แสดง แต่สิ่งนี้นำไปสู่วิธีการสาธารณะที่ผสมผสานกันระหว่างวิธีส่วนตัว ฉันใช้เทคนิคนี้ แต่บ่อยครั้งที่ฉันรู้สึกฉีกขาดและต้องการเพิ่มวิธีการสาธารณะทั้งหมดให้อยู่ในอันดับต้น ๆ เพราะยังมีอีกมากที่จะกล่าวว่าสำหรับการอ่านอินเทอร์เฟซสาธารณะได้อย่างง่ายดาย
ฌอน

@Sean ปกติแล้วฉันจะพยายาม จำกัด API สาธารณะของชั้นเรียนของฉันหรือปล่อยให้มันเป็นส่วนหน้าถ้าเหมาะสม แต่จากนั้นผลักผู้ช่วยในการปรับใช้ให้กลายเป็นผู้ทำงานร่วมกัน ทดสอบ refactor สารสกัดทำซ้ำ แต่แน่นอนขึ้นอยู่กับว่าคุณต้องการไปไกลแค่ไหน ฉันชอบชั้นเรียนขนาดเล็ก
Anthony Pegram

11

วิธีสาธารณะเป็นส่วนต่อประสานของชั้นเรียน ผู้ที่สนใจใช้คลาสของคุณจะสนใจเฉพาะอินเทอร์เฟซ จากมุมมองของผู้ใช้คลาสมันจะมีประโยชน์ที่จะมีวิธีสาธารณะก่อนเพื่อลดการเลื่อน


5

ใน C และ C ++ เมธอดตัวช่วยมักจะถูกวางไว้ก่อนเพราะคุณไม่จำเป็นต้องมีการประกาศ ผู้คนจำนวนมากอุ้มนิสัยนั้นไปเป็นภาษาอื่นที่ไม่สำคัญ

ฉันชอบวิธีการสาธารณะด้านบนเพราะปกติเมื่อฉันเปิดไฟล์ฉันกำลังมองหาส่วนต่อประสานสาธารณะ ฉันไม่ต้องการเลื่อนดูรายละเอียดการใช้งานทั้งหมด มันก็เป็นสไตล์ที่ได้รับความนิยมมากที่สุดที่ฉันเคยเห็นด้วย


2

ฉันชอบลำดับของวิธีการในชั้นเรียนโดยขึ้นอยู่กับความสามารถในการอ่านและบริบทไม่ใช่การมองเห็น

เช่นวิธีการ 'เปิด' อาจเป็นของก่อน 'ปิด' หากวิธีการสาธารณะสองวิธี 'a' และ 'b' เรียกว่า 'c' แบบส่วนตัวและพวกเขาเป็นวิธีเดียวที่เรียกมันว่า - ฉันต้องการให้ 'c' อยู่ถัดจากพวกเขา

ฉันไม่คิดว่าวิธีการเรียงลำดับตามการมองเห็นเป็นสิ่งที่ดี


1

ฉันมักจะชอบที่จะเห็นชั้นเรียนของฉันที่สมาชิกมีการระบุไว้ในลำดับความสำคัญ / การมองเห็น (ที่นี่ตามความสำคัญฉันหมายความว่ามีผลกระทบโดยตรงต่อส่วนต่อประสานสาธารณะ)

ฟังก์ชั่นส่วนตัวจึงมีแนวโน้มที่จะถูกผลักลง

มีข้อยกเว้นสำหรับเรื่องนี้ที่ฉันจะมีแนวโน้มที่จะจัดกลุ่มฟังก์ชั่นที่คล้ายกันเข้าด้วยกันดังนั้นจึงเป็นไปได้ที่จะหาฟังก์ชั่นส่วนตัวขนาดเล็กที่สอดประสานกับสิ่งของสาธารณะ

นี่คือเรื่องของรสนิยม

อย่างไรก็ตามเมื่อทำงานกับรหัสที่ไม่ใช่ของฉันฉันจะลองทำตามอนุสัญญาใด ๆ ที่ใช้ในโครงการ

วิธีหนึ่งที่ดีที่ฉันพบว่าติดตามสิ่งนี้คือ (สมมติว่าคุณทำงานกับ Eclipse) สร้างการกำหนดค่าการจัดรูปแบบโค้ดและส่งออกด้วยแหล่งที่มาของโครงการและส่งไปยังแหล่งควบคุม วิธีที่ล่าสุดและยิ่งใหญ่ที่สุดในการประชุมโค้ดสำหรับโครงการคือการคลิกเพียงไม่กี่ครั้งเพื่อตั้งค่าและสร้างความกระตือรือล้นของ CTRL-SHIFT-F ก่อนที่คุณกระทำจะป้องกันข้อโต้แย้งจำนวนมาก

โบนัสเพิ่มเติมของการใช้ตัวจัดรูปแบบอัตโนมัติคือคุณสามารถทำสิ่งต่าง ๆ ในการประชุมที่ทำให้คุณมีความสุขและเพียงแค่จัดรูปแบบโค้ดก่อนส่งมอบ YMMV ขึ้นอยู่กับการประชุมและเครื่องมือการจัดรูปแบบดังกล่าว

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.