MVC 布局学习笔记

MVC(Model-View-Controller)是一种软件架构模式,主要用于分离应用程序的数据、用户界面和控制逻辑。在 MVC 模式下,应用程序被分为 3 个核心组件:Model、View 和 Controller。

Model

Model 是应用程序的核心组件,它表示应用程序中的数据和业务逻辑。Model 负责管理数据的读写,以及各种数据操作。

例如,在一个电商网站中,商品信息就可以作为 Model 的一部分。Model 可以提供以下接口:

pythonCopy Code
class 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 Code
class 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 Code
class 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 Code
model = 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 来处理购物车逻辑,向购物车中添加了商品并获取购物车商品信息,最终打印了购物车中的商品信息。