Friday, September 08, 2006

Law of Demeter

ช่วงนี้หากินกับน้องๆในบริษัทดีกว่า
ลองดู 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"

Related link from Roti

3 comments:

Keng said...

แนวๆ นี้คณะผมเรียกว่าโชว์พลังอ่ะครับ

bact' said...

ล้วงลูกจริง ๆ ไปแย่งหน้าที่เค้าหมด :P

plynoi said...

ผมก็เป็นครับ

จะไม่ทำแล้วคร๊าบบบบ T_T