MVC 布局学习笔记
MVC(Model-View-Controller)是一种软件架构模式,主要用于分离应用程序的数据、用户界面和控制逻辑。在 MVC 模式下,应用程序被分为 3 个核心组件:Model、View 和 Controller。
Model
Model 是应用程序的核心组件,它表示应用程序中的数据和业务逻辑。Model 负责管理数据的读写,以及各种数据操作。
例如,在一个电商网站中,商品信息就可以作为 Model 的一部分。Model 可以提供以下接口:
pythonCopy Codeclass Product:
def __init__(self, id, name, price):
self.id = id
self.name = name
self.price = price
class ProductModel:
def __init__(self):
self.products = []
def add_product(self, product: Product):
self.products.append(product)
def get_product_by_id(self, id: int) -> Product:
for p in self.products:
if p.id == id:
return p
return None
以上代码实现了一个简单的 ProductModel,其中包含了 add_product 和 get_product_by_id 接口用来添加商品和根据商品 ID 查找商品。
View
View 是应用程序中负责展示数据的组件,它与用户交互,显示数据并响应用户输入。
例如,在一个电商网站中,商品列表、购物车等页面就可以作为 View 的一部分。以下是一个简单的商品列表 View 的示例:
pythonCopy Codeclass ProductListView:
def __init__(self, products: List[Product]):
self.products = products
def render(self):
for p in self.products:
print(f"{p.name} - ${p.price}")
以上代码实现了一个简单的 ProductListView,其中包含了 render 接口用来展示商品列表。
Controller
Controller 是应用程序中负责控制数据流和业务逻辑的组件,它接收用户输入并调用相应的 Model 和 View 进行处理。
例如,在一个电商网站中,购物车页面就可以作为 Controller 的一部分。以下是一个简单的购物车 Controller 的示例:
pythonCopy Codeclass ShoppingCartController:
def __init__(self, product_model: ProductModel):
self.product_model = product_model
self.cart_items = {}
def add_to_cart(self, product_id: int):
product = self.product_model.get_product_by_id(product_id)
if product is not None:
if product_id in self.cart_items:
self.cart_items[product_id]["quantity"] += 1
else:
self.cart_items[product_id] = {"product": product, "quantity": 1}
def get_cart_items(self) -> List[Tuple[Product, int]]:
items = []
for k, v in self.cart_items.items():
items.append((v["product"], v["quantity"]))
return items
以上代码实现了一个简单的 ShoppingCartController,其中包含了 add_to_cart 和 get_cart_items 接口用来添加商品到购物车和获取购物车中的商品。
示例
以下是一个简单的电商网站的示例,展示了如何使用 MVC 模式来实现应用程序的开发:
pythonCopy Codemodel = ProductModel()
product1 = Product(1, "iPhone 12", 899)
product2 = Product(2, "AirPods Pro", 249)
product3 = Product(3, "Apple Watch SE", 279)
model.add_product(product1)
model.add_product(product2)
model.add_product(product3)
view = ProductListView(model.products)
view.render()
controller = ShoppingCartController(model)
controller.add_to_cart(1)
controller.add_to_cart(1)
controller.add_to_cart(2)
controller.add_to_cart(3)
cart_items = controller.get_cart_items()
print("\nCart Items:")
for item in cart_items:
print(f"{item[0].name} x {item[1]}")
以上代码中,首先创建了一个 ProductModel,并向其中添加了 3 个商品。然后创建了一个 ProductListView 来展示商品列表,使用 render 方法打印了商品列表信息。
接着创建了一个 ShoppingCartController 来处理购物车逻辑,向购物车中添加了商品并获取购物车商品信息,最终打印了购物车中的商品信息。