python-设计模式-MVC模式

概述

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()

运行结果

python-设计模式-MVC模式_第1张图片

 

 

 

你可能感兴趣的:(#,设计模式,设计模式,mvc)