概述
mvc模式的思想就是分层,将每个关注点的问题放在不同的层上进行解决。该模式符合SOC(关注点分离)原则,一般会分为数据访问层,业务逻辑层,表示层。
- 数据访问层:处理和数据的交互,如:建立连接,是否使用连接池,获取数据,插入数据等等
- 表示层:只处理数据的展示,比如展示为饼图,使用不同的色调等等
- 业务逻辑层:这一层负责将表示层和数据访问层粘合,将表示层的请求,按照业务规则处理后,向数据访问层插入数据或者获取数据等等
我们还是使用椰奶的例子说事,比如柜台存放椰奶这件事:
- 柜台该怎么摆放,这就是表示层的事
- 到底要摆放那些椰奶,顾客选择的椰奶多少钱这是业务逻辑层的事
- 选择的椰奶到底在不在库存,这就是数据访问层的事
实践一下
# @Time : 2022/7/17 15:18
# @File : MvcModel.py
# @Software: PyCharm
inventory = [
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 inventory
class 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()
运行结果