ฉันพยายามเรียนรู้ GRASP และฉันพบสิ่งนี้อธิบาย ( ที่หน้า 3 ) เกี่ยวกับการมีเพศสัมพันธ์ต่ำและฉันรู้สึกประหลาดใจมากเมื่อฉันพบสิ่งนี้:
พิจารณาวิธีการ
addTrackสำหรับAlbumชั้นเรียนสองวิธีที่เป็นไปได้คือ:
addTrack( Track t )และ
addTrack( int no, String title, double duration )วิธีใดลดข้อต่อ อย่างที่สองทำเนื่องจากคลาสที่ใช้คลาส Album ไม่จำเป็นต้องทราบคลาส Track โดยทั่วไปพารามิเตอร์สำหรับเมธอดควรใช้ประเภทฐาน (int, char ... ) และคลาสจากแพ็กเกจ java. *
ฉันมักจะพูดพล่ามกับเรื่องนี้; ฉันเชื่อว่าaddTrack(Track t)ดีกว่าaddTrack(int no, String title, double duration)เนื่องจากเหตุผลหลายประการ:
มันจะดีกว่าเสมอสำหรับวิธีการที่จะทำให้พารามิเตอร์น้อยลงที่สุดเท่าที่จะเป็นไปได้ (ตาม Clean Code ของลุงบ็อบไม่มีหรืออย่างใดอย่างหนึ่งที่ดีกว่า, 2 ในบางกรณีและ 3 ในกรณีพิเศษมากกว่า 3 ต้องการ refactoring .
หาก
addTrackเป็นวิธีการของอินเตอร์เฟซและข้อกำหนดที่ต้องการให้ aTrackควรมีข้อมูลเพิ่มเติม (เช่นปีหรือประเภท) ดังนั้นอินเทอร์เฟซที่จะต้องมีการเปลี่ยนแปลงและเพื่อให้วิธีการที่ควรสนับสนุนพารามิเตอร์อื่นการห่อหุ้มถูกทำลาย ถ้า
addTrackอยู่ในอินเตอร์เฟซแล้วมันไม่ควรจะรู้ internalsTrackของเป็นจริงมากขึ้นควบคู่ไปกับวิธีที่สองด้วยพารามิเตอร์จำนวนมาก สมมติว่า
noพารามิเตอร์ต้องเปลี่ยนจากintเป็นlongเพราะมีมากกว่าMAX_INTแทร็ก (หรือด้วยเหตุผลใดก็ตาม); ดังนั้นทั้งสองTrackและวิธีการจะต้องมีการเปลี่ยนแปลงในขณะที่ถ้าวิธีการจะมีaddTrack(Track track)เพียงTrackจะมีการเปลี่ยนแปลง
อาร์กิวเมนต์ 4 ข้อทั้งหมดเชื่อมโยงกันจริง ๆ และบางข้อขัดแย้งกัน
วิธีไหนดีกว่ากัน