เมื่อเร็ว ๆ นี้ฉันมีปัญหาเกี่ยวกับการใช้คลาสที่เป็นนามธรรม
บางครั้งคลาสนามธรรมจะถูกสร้างขึ้นล่วงหน้าและทำงานเป็นแม่แบบของวิธีการเรียนที่ได้รับจะทำงาน ซึ่งหมายความว่ามากหรือน้อยที่พวกเขามีฟังก์ชั่นระดับสูงบางอย่าง แต่ออกรายละเอียดบางอย่างที่จะดำเนินการโดยชั้นเรียนที่ได้รับ ชั้นนามธรรมกำหนดความต้องการรายละเอียดเหล่านี้โดยการวางวิธีการบางอย่างที่เป็นนามธรรม ในกรณีเช่นนี้คลาสนามธรรมจะทำงานเหมือนกับพิมพ์เขียวคำอธิบายระดับสูงของฟังก์ชันหรือสิ่งที่คุณต้องการเรียกใช้ ไม่สามารถใช้ด้วยตนเองได้ แต่ต้องมีความเชี่ยวชาญในการกำหนดรายละเอียดที่ถูกทิ้งไว้จากการใช้งานระดับสูง
บางครั้งมันเกิดขึ้นที่คลาสนามธรรมถูกสร้างขึ้นหลังจากการสร้างคลาส "ที่ได้รับ" บางส่วน (เนื่องจากคลาสแม่ / นามธรรมไม่ได้อยู่ที่นั่นพวกเขายังไม่ได้รับมา แต่คุณรู้ว่าฉันหมายถึงอะไร) ในกรณีเหล่านี้คลาสนามธรรมมักจะใช้เป็นสถานที่ที่คุณสามารถใส่รหัสทั่วไปใด ๆ ที่คลาสที่ได้รับปัจจุบันมี
หลังจากทำการสังเกตข้างต้นฉันสงสัยว่าในสองกรณีนี้ควรเป็นกฎ รายละเอียดใด ๆ ที่ควรจะถูกทำให้กระฉับกระเฉงขึ้นไปสู่ชั้นนามธรรมเพียงเพราะพวกเขากำลังเกิดขึ้นเป็นเรื่องธรรมดาในทุกชั้นเรียนที่ได้รับ? ควรใช้รหัสทั่วไปที่ไม่ได้เป็นส่วนหนึ่งของฟังก์ชั่นระดับสูงหรือไม่?
รหัสที่อาจไม่มีความหมายสำหรับคลาสนามธรรมควรมีเพียงเพราะมันเกิดขึ้นเป็นเรื่องธรรมดาสำหรับคลาสที่ได้รับ?
ขอยกตัวอย่าง: คลาสนามธรรม A มีเมธอด a () และเมธอด abstract aq () เมธอด aq () ทั้งคลาสที่ได้รับ AB และ AC ใช้เมธอด b () ควรย้าย b () ไปที่ A หรือไม่ ถ้าใช่แล้วในกรณีที่มีคนดูที่ A (สมมติว่า AB และ AC ไม่อยู่ที่นั่น) การมีอยู่ของ b () จะไม่สมเหตุสมผล! นี่เป็นสิ่งที่ไม่ดีเหรอ? ควรมีใครบางคนสามารถมองในชั้นนามธรรมและเข้าใจสิ่งที่เกิดขึ้นโดยไม่ต้องไปเรียนที่ได้รับ?
พูดตามตรงตอนนี้ฉันมักจะเชื่อว่าการเขียนคลาสนามธรรมที่เหมาะสมโดยไม่ต้องดูในคลาสที่ได้รับมันเป็นเรื่องของรหัสที่สะอาดและสถาปัตยกรรมที่สะอาด Ιไม่ชอบความคิดของคลาสนามธรรมที่ทำหน้าที่เหมือนดัมพ์สำหรับโค้ดประเภทใด ๆ เกิดขึ้นเป็นเรื่องธรรมดาในคลาสที่ได้รับทั้งหมด
คุณคิด / ฝึกทำอะไร
Writing an abstract class that makes sense without having to look in the derived classes is a matter of clean code and clean architecture.
- ทำไม เป็นไปไม่ได้ที่ในระหว่างการออกแบบและพัฒนาแอพพลิเคชั่นฉันพบว่ามีหลายคลาสที่มีฟังก์ชั่นการใช้งานทั่วไป ฉันต้องมีญาณทิพย์เพียงพอที่จะคาดหวังสิ่งนี้เสมอก่อนที่จะเขียนโค้ดใด ๆ สำหรับคลาสที่ได้รับ หากฉันล้มเหลวในการเป็นคนฉลาดนี้ฉันจะถูกห้ามไม่ให้ทำการปรับโครงสร้างดังกล่าวอีกครั้งหรือไม่? ฉันต้องโยนรหัสของฉันและเริ่มต้นใหม่หรือไม่