คลาสการตั้งชื่อกลายเป็นทำให้อ่อนแอ [ปิด]


9

ฉันไม่แน่ใจว่านี่เป็นลักษณะ OCD หรือไม่ แต่ฉันพบว่าบางครั้งฉันถูกบล็อกอย่างสมบูรณ์ไม่สามารถดำเนินการต่อสิ่งที่ฉันทำเมื่อตั้งชื่อชั้นเรียน (หรือฟังก์ชั่นหรือ namespace ฯลฯ ) ที่ฉันเชื่อว่าจะใช้ภายนอก ของโครงการที่กำหนด API เช่น หรือไลบรารีคลาสยูทิลิตี้

หากการตั้งชื่อไม่ถูกต้อง (ในใจของฉัน) ฉันไม่สามารถดำเนินการต่อได้ ... ฉันพยายามที่จะหาชื่อที่ถูกต้อง ฉันได้ลองเขียนแอพเล็ก ๆ ที่จะใช้เพื่อดูว่าชื่อมีลักษณะอย่างไร แต่ดูเหมือนจะไม่ช่วย ...

ฉันรู้ว่ามันไม่สำคัญและมันขัดกับความคิดในการเขียนโปรแกรมใด ๆ ที่จะสมมติว่าคุณได้มันสมบูรณ์แบบก่อนใคร ... ฉันแค่รู้สึกไร้พลังไป ...

เคล็ดลับ / ความคิดใด ๆ ที่จะได้รับการชื่นชมอย่างมาก ...


3
จากประสบการณ์ของฉันเมื่อคุณสรุปเนื้อหาของชั้นเรียนอีกครั้งและแยกตัวประกอบจากนั้นชื่อของชั้นเรียนและวิธีการต่าง ๆ จะเริ่มเข้าที่แทน
งาน

11
การอ้างอิงข้อผูกมัด:“ มีเพียงสองปัญหาที่ยากในวิทยาการคอมพิวเตอร์: การทำให้ใช้ไม่ได้แคชและการตั้งชื่อสิ่งที่” - Phil Karlton
Macke

ความรู้สึกคุ้นเคย อย่าเพิ่งยอมแพ้อย่าเริ่มตั้งชื่อ "Common", "Utilities", "Managers" และ "Helpers" :)
Arnis Lapsa

คำตอบ:


10

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

นี่คือวิธีการบางอย่างที่ฉันใช้เพื่อเอาชนะสิ่งนี้:

  1. ยอมรับว่าไม่มีโซลูชันที่สมบูรณ์แบบมีเพียงโซลูชันที่ดีกว่าโซลูชันอื่น ๆ
  2. ใส่สิ่งแรกก่อน การทำโปรแกรมมอบหมายให้เสร็จสมบูรณ์นั้นสำคัญกว่าการทำอย่างสมบูรณ์
  3. ถามคนอื่น เราทุกคนมีพื้นที่ของเราที่เราจมลงไป บางทีคนอื่นจะสร้างชื่อที่ดีหรือบอกคุณว่ามันไม่สำคัญ
  4. กำหนดเวลา ให้เวลากับตัวคุณเอง x นาทีในการทำสิ่งที่คุณต้องทำแล้วต่อไป
  5. สัญญากับตัวเองว่าคุณจะกลับมาใหม่ในภายหลัง เก็บบันทึกสิ่งที่คุณต้องการกลับมา ปัญหาประเภทนี้จำนวนมากจะชัดเจนขึ้นเมื่อคุณปล่อยให้มันอยู่คนเดียว ไม่ว่าคุณจะสร้างชื่อที่ดีขึ้นในภายหลังหรือคุณจะรู้ว่ามันไม่สำคัญ
  6. ยอมรับว่าในเวลา 100 ปีแล้วไม่มีใครสนใจเลย
  7. ทำตรงข้าม ให้ชื่อเสียจริงในชั้นเรียนแล้วดูว่าเกิดอะไรขึ้น นี่จะเป็นการยืนยันความจำเป็นที่จะต้องใช้เวลากับชื่อที่ดีขึ้นหรือแสดงให้เห็นว่ามันมีความสำคัญเพียงใด นอกจากนี้สิ่งนี้จะช่วยให้คุณแยกออกจากความคิดครอบงำ
  8. อธิษฐาน สิ่งนี้ใช้ได้กับฉันเสมอ
  9. เห็นคุณค่าของตัวคุณเองนอกเหนือจากสิ่งที่คุณทำ แยกออกจากแนวคิดที่ว่าคุณค่าของคุณมาจากการส่งมอบความสมบูรณ์แบบ เมื่อเราตระหนักว่าเรามีคุณค่าที่แท้จริงนอกเหนือจากงานของเราเรารู้สึกอับอายน้อยลงเมื่อเราไม่ได้วัดตามมาตรฐานของเราเอง
  10. สร้างคำศัพท์ใหม่และใช้คำเหล่านี้เพื่อตั้งชื่อชั้นเรียนของคุณหรือเพียงแค่ใช้คำศัพท์เก่า ๆ การเขียนโปรแกรมเป็นกระบวนการที่สร้างสรรค์และบางครั้งแนวคิดที่เราได้รับนั้นเป็นแนวคิดใหม่ แนวคิดใหม่ต้องการชื่อใหม่ "EmployeeTransmogrifier" เป็นชื่อที่ถูกต้องสมบูรณ์แบบสำหรับชั้นเรียน
  11. พิจารณาว่าคุณกำลังพยายามแก้ไขปัญหาที่ผิด ตัวอย่างเช่นการเขียน API ไม่ใช่ความคิดที่ดีอย่างชัดเจนว่าผู้ใช้ต้องการอะไร หากคุณแก้ปัญหานี้ปัญหาการตั้งชื่อของคุณอาจง่ายกว่ามาก
  12. กินข้าวเที่ยง. อาหารกลางวันดีเสมอ

4
+1 สำหรับมื้อกลางวัน ผู้คนจำนวนมากไม่ได้ให้ความสำคัญกับการคิดอย่างอื่นเพื่อแก้ปัญหา
unholysampler

บางอย่างที่ดีและคิดว่าดีออกจุด ...
davidsleeps

5

ประการแรก

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

ในประการที่สอง

คุณมีรูปแบบการตั้งชื่อชั้นเรียนของคุณหรือไม่? อาจลองดูรูปแบบการตั้งชื่อทั่วไปบางอย่างเช่นรูปแบบซึ่งจะง่ายต่อการติดตามมากขึ้นเมื่อคุณได้ระบุ SRP ด้านบน คลาสของคุณแยกวิเคราะห์ XML หรือไม่ ลอง XMLParser มันแยกวิเคราะห์ XML สร้างแบบจำลองโดเมนเพื่อเป็นตัวแทนของอินพุตเก็บไว้ในฐานข้อมูลแล้วโพสต์ข้อความความสำเร็จไปที่ Twitter หรือไม่ ลองปรับโครงสร้างอีกครั้ง

ประการที่สาม

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


ในที่สุดและออกเล็กน้อยหัวข้อ

ฉันมีช่วงเวลาที่หลอดไฟเบาในงานบางอย่างที่ฉันทำในวันอื่น ๆ การใช้ระบบที่ไม่สำคัญและฉันใช้เวลายุติธรรมเล่นรอบกับชื่อที่แตกต่างกันของชั้นเรียน ฯลฯ ... ตั้งชื่ออินเทอร์เฟซของคุณตามการใช้งาน คลาสตามการดำเนินการเฉพาะของพวกเขา ... ตัวอย่างเช่นคุณอาจถูกล่อลวงให้มี IXMLParser และ XMLParser แต่จะเกิดอะไรขึ้นเมื่ออินพุตของคุณเปลี่ยนเป็น JSON? ลอง IInputParser แทนวิธีที่คุณสามารถสร้างคลาสคลาส XMLParser และ JSONParser ที่เป็นรูปธรรมซึ่งทั้งคู่ใช้ IInputParser ในวิธีที่ต่างกัน


ใช่ฉันมีช่วงเวลาเช่นนี้เช่นกัน ... ปัญหาคือคุณเก่งมากและคุณไม่สามารถเขียนโค้ดที่ตั้งใจได้สามรูปแบบมักจะเป็นรูปแบบที่เป็นนามธรรมของ ...
Robin Vessey

1

สำหรับฉันมันมักจะเป็นสัญญาณการออกแบบที่ไม่ชัดเจนในใจของฉันดังนั้นฉันจึงตั้งชื่อและให้เวลากับตัวเอง (พูด 2 นาที) เพื่อหาสิ่งที่ดีกว่าในตอนท้ายของเวลานั้นฉันต้อง ใช้อันที่ฉันคิดไว้ก่อน Barney, Wilma และ Fred เป็นรายการโปรดที่เริ่มต้นด้วย ฉันทำสิ่งต่าง ๆ เช่น "BarniesInputParser" ชื่อแย่มากฉันต้องคิดชื่อที่ดีขึ้นหรือเปลี่ยนในภายหลัง พวกเขายังไม่ดีเท่าที่พวกเขาจะไม่ซ้ำกันทำให้การปรับโครงสร้างเล็กน้อยและปลอดภัยและทุกคนที่ดูรหัสที่ไม่สมบูรณ์สามารถดูได้ทันทีว่ามันไม่สมบูรณ์

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

หรือไปทำกาแฟ ก่อนที่คุณจะไปที่เครื่องคุณจะได้ ...


อย่างน่ากลัวฉันรู้ว่าซอฟต์แวร์ที่จัดส่งมีชื่อว่าอย่างนั้น ... ลองจินตนาการว่าจะอธิบายว่าหนึ่งปีต่อมาเมื่อคุณเป็นคนเดียวใน บริษัท ที่ยังคงรู้ว่าใครคือ "ทิม"
Yaur

0

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


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