ลองดู statement ที่น้องใหม่เขียน
line = repOut.getPages().get(pageIndex-1).getLines().get(lineIndex-1);
วัตถุประสงค์ของบรรทัดข้างบน
ก็คือต้องการดึง current Line ขึ้นมา
ประเด็นก็คือ มัน(class ที่ implement method นี้)ล้วงลูกไปไกลเหลือเกิน
แถมยังรู้มากด้วย โดย method นี้รู้หมดว่า page เก็บอยู่ใน List Structure
ส่วน line ก็เก็บใน List เช่นเดียวกัน
ปัญหาของการล้วงลูก หรือรู้มาก ก็คือ
ในอนาคต ถ้ามีการปรับเปลี่ยน structure ของ page หรือ line เมื่อไร
จำนวน code ที่จะโดน effect ก็จะเยอะตามไปด้วย
ใน OO มันมีกฎอยู่ข้อหนึ่ง ก็คือ "Law of Demeter"
อธิบายสั้นๆว่า "Only talk to your friends"
ดังนั้นถ้าเขียนให้ถูกตามกฎของ Law of Demeter เราควรจะเขียนแค่นี้พอ
line = repOut.getCurrentLine()
Good fences make good neighbors.
Robert Frost, "Mending Wall"
** ประโยคเด็ดข้างบน ลอกจาก "The Pragmatic Programmer, from journeyman to master"
บทที่ว่าด้วยเรื่อง "Decoupling and the Law of Demeter"
3 comments:
แนวๆ นี้คณะผมเรียกว่าโชว์พลังอ่ะครับ
ล้วงลูกจริง ๆ ไปแย่งหน้าที่เค้าหมด :P
ผมก็เป็นครับ
จะไม่ทำแล้วคร๊าบบบบ T_T
Post a Comment