The before code mixes restaurant, menu, and order logic in one class, making it hard to maintain. The after code separates concerns: Restaurant holds a Menu, Menu manages items, and Order uses Menu to validate and place orders. This separation improves clarity and extensibility.
### Before (all responsibilities mixed in one class)
class RestaurantOrder:
def __init__(self, name):
self.name = name
self.menu_items = {}
self.orders = []
def add_menu_item(self, item_name, price):
self.menu_items[item_name] = price
def place_order(self, item_name):
if item_name in self.menu_items:
self.orders.append(item_name)
else:
print("Item not on menu")
### After (separated classes)
class Restaurant:
def __init__(self, name):
self.name = name
self.menu = Menu()
class Menu:
def __init__(self):
self.items = {}
def add_item(self, item_name, price):
self.items[item_name] = price
def has_item(self, item_name):
return item_name in self.items
class Order:
def __init__(self, menu):
self.menu = menu
self.ordered_items = []
def place_order(self, item_name):
if self.menu.has_item(item_name):
self.ordered_items.append(item_name)
else:
print("Item not on menu")