10. Dragon ADR Damage Take¶
ADR - Architecture Design Records
10.1. Problem¶
Make DMG points damage to the dragon
10.2. Option 1¶
>>> dragon.set_damage(DMG)
Good: easy to use
Good: clear intent
Good: encapsulation
Bad:
set_damage()
indicates setter ofdamage
fieldBad: not Pythonic way
10.3. Option 2¶
>>> dragon.wound(DMG) # dragon -> enemy
>>> dragon.hurt(DMG) # dragon <- enemy
>>> dragon.hit(DMG) # dragon <-> enemy
>>> dragon.damage(DMG) # dragon -> enemy
Bad: Indication of direction is too weak
dragon <-> enemy
Rationale:
dragon ---> enemy
dragon -> enemy
dragon <-> enemy
dragon <- enemy
dragon <--- enemy
10.4. Option 3¶
>>> dragon.hurt_self(DMG) # bad name, dragon ---> enemy
>>> dragon.receive_damage(DMG) # good name, dragon ---> enemy
Good: Explicit relation
dragon ---> enemy
Bad:
hurt_self()
is to colloquialBad: Inconsistent with
make_damage()
10.5. Option 4¶
>>> dragon.take_damage(DMG) # dragon ---> enemy
Good: Explicit relation
dragon ---> enemy
Good: Consistent with
make_damage()
10.6. Option 5¶
>>> dragon.health - DMG
>>> dragon.health -= DMG
Good: simple
Good: can use
@property
for validation if neededBad: requires knowledge of API
Bad: encapsulation
10.7. Option 6¶
>>> dragon.health - Damage(20)
>>> dragon.health -= Damage(20)
Good: simple
Good: can use
@property
for validation if neededBad: requires knowledge of API
Bad: encapsulation
10.8. Option 7¶
>>> dragon - DMG
>>> dragon -= DMG
Good: simple
Good: can use
.__sub__()
for validation if neededBad: requires knowledge of API
10.9. Option 8¶
>>> dragon - Damage(20)
>>> dragon -= Damage(20)
Good: simple
Good: can use
.__sub__()
for validation if neededBad: requires knowledge of API
10.10. Option 9¶
>>> dragon < Damage(20)
>>> dragon <= Damage(20)
Good: simple
Good: can use
.__lt__()
,.__le__()
for validation if neededBad: requires knowledge of API
10.11. Option 9¶
>>> dragon.__sub__(DMG)
>>> dragon.__isub__(DMG)
Good: encapsulation
Bad: not Pythonic way
Bad: not simple
Bad: requires knowledge of API
10.12. Decision¶
>>> dragon.take_damage(DMG)
Good: encapsulation
Good: easy
Good: Explicit relation
dragon ---> enemy