概述
mvc模式的思想就是分层,将每个关注点的问题放在不同的层上进行解决。该模式符合SOC(关注点分离)原则,一般会分为数据访问层,业务逻辑层,表示层。
- 数据访问层:处理和数据的交互,如:建立连接,是否使用连接池,获取数据,插入数据等等
- 表示层:只处理数据的展示,比如展示为饼图,使用不同的色调等等
- 业务逻辑层:这一层负责将表示层和数据访问层粘合,将表示层的请求,按照业务规则处理后,向数据访问层插入数据或者获取数据等等
我们还是使用椰奶的例子说事,比如柜台存放椰奶这件事:
- 柜台该怎么摆放,这就是表示层的事
- 到底要摆放那些椰奶,顾客选择的椰奶多少钱这是业务逻辑层的事
- 选择的椰奶到底在不在库存,这就是数据访问层的事
实践一下
# @Time : 2022/7/17 15:18
# @File : MvcModel.py
# @Software: PyCharminventory = [f"盒装,代言人徐冬冬,100ml, 椰奶",f"盒装,代言人张一山,100ml, 椰奶",f"罐装,代言人古力娜扎,200ml, 椰奶",f"瓶装,代言人马尔扎哈,300ml, 椰奶",
]class CoconutMilkModel:def get_inventory_nums(self):print("获取库存量")return len(inventory)def get_one(self, n):if not isinstance(n, int):n = int(n)if n > len(inventory) -1:raise Exception(f"不存在的库存 {n}")return inventory[n]def get_all(self):return inventoryclass CoconutMilkView:def show(self, all_cm):print(f"我要将所有的椰奶,横着摆放, {all_cm}")def error(self, msg):print(f"ERROR, {msg}")def select_one(self):return input("请选一个椰奶, 老弟 ==> ")class CoconutMilkController:def __init__(self):self.view = CoconutMilkView()self.model = CoconutMilkModel()def run(self):self.view.show(self.model.get_all())while True:try:select_num = self.view.select_one()print(self.model.get_one(select_num))except Exception as e:self.view.error(e.__str__())if __name__ == "__main__":cm_controller = CoconutMilkController()cm_controller.run()
运行结果