The before code applies moves directly without checking if they are legal, risking invalid game states. The after code introduces a MoveValidator that checks each move against game rules before applying it, ensuring only valid moves update the game state.
### Before: No validation
class Game:
def __init__(self):
self.state = {}
def make_move(self, move):
# Directly apply move without checks
self.state.update(move)
### After: With move validation
class MoveValidator:
def __init__(self, rules):
self.rules = rules
def is_valid(self, move, state):
# Check move against rules and current state
return all(rule(move, state) for rule in self.rules)
class Game:
def __init__(self, validator):
self.state = {}
self.validator = validator
def make_move(self, move):
if self.validator.is_valid(move, self.state):
self.state.update(move)
return True
else:
return False