เนื่องจากการเปลี่ยนแปลงของ API / วิธีการลงนามสาธารณะควรมีเพียงเล็กน้อยเพื่อป้องกันการแตกรหัสลูกค้าที่ใช้วิธีการเหล่านี้ฉันสงสัยว่ากฎหมายของ Demeterนั้นมีผลบังคับใช้น้อยกว่านี้หรือไม่
ตัวอย่างง่ายๆ:
class Account() {
double balance;
public void debit(Transaction t) {
balance -= t.getAmount();
}
}
โปรดสังเกตว่าวิธีการเดบิตผ่านวัตถุการทำธุรกรรมมากกว่าเพียงแค่จำนวนสองเท่า ('กฎหมายของ Demeter' ตามที่ฉันเข้าใจว่าจะบอกให้ส่งผ่านข้อมูลที่ต้องการในกรณีนี้เพียงแค่จำนวนเงินไม่ใช่วัตถุธุรกรรม ... ) เหตุผลเบื้องหลังนี้เป็นเพราะวิธีการในอนาคตอาจต้องการคุณสมบัติการทำธุรกรรมอื่นนอกเหนือจากจำนวนเงิน จากสิ่งที่ฉันเข้าใจสิ่งนี้จะป้องกันไม่ให้ลายเซ็นวิธีการแตกหักโดยการเพิ่มพารามิเตอร์ใหม่ในอนาคต
สิ่งนี้ทำให้เป็นตัวเลือกที่สมเหตุสมผลหรือไม่? หรือฉันกำลังพลาดอะไรอยู่?