zoukankan      html  css  js  c++  java
  • python 设计模式之MVC模式

    一.简单介绍

    mvc模式  the  model-view-controller pattern

    mvc模式是一个运用在软件工程中的设计模式。mvc模式脱离了以前简单的web服务设计逻辑,将开发,测试和维护分离。在MVC模式中,应用被分解为相互作用的模块,模型,视图,控制。目的在于分离输入(control),处理逻辑(model),输出格式(view)。

    简单的理解:

    1. 控制模块用于获取用户输入,并将模型与视图建立联系
    2. 模型主要是从存储获取数据
    3. 视图用于展示给用户,从模型获取的数据

    具体细节:

      控制模块:可以被看作是一个介于用户,处理(model),显示(view)之间的中间人。它是用户请求的入口,也是应用处理的入口。控制模块接受用户输入,解析,决定哪一个model和view参与处理,因此,它决定了针对用户请求,选择何种view和model。

      模型模块:处理业务的应用程序,model操作数据库,比如插入,更新,删除。每个模型会提供固定类型的数据给控制模块,另一方面,控制模块可以调用模型的不同方法处理数据,并将处理后的结果返回给视图模型

      视图模块:主要用来显示,通过控制模块获取模型模块处理后的数据,并进行格式化的显示。通过控制模块选择view并显示反馈给用户。view模型的选择是基于模型模块的l选择和用户配置等等。

    二.简单的例子

    测试管理系统用来查询错误列表

     情景描述:

    •   如果用户查询一个特定的错误,测试管理系统以某种格式显示这个错误的描述
    •   如果用户搜索相关错误的关键值,测试管理系统显示所有相关的错误列表

     创建SQLite 数据库,库名TMS,并创建一个表

     

    ID Component Summary
    1 XYZ File doesn't  get deleted
    2 XYZ Registry doesn't  get created
    3 ABC Wrong title gets displayed

    代码如下:

     1 #mvc.py
     2 import sqlite4
     3 import types
     4 
     5 class DefectModel:
     6     def getDefectList(self, component):
     7         query = "select ID from defects where Component= '%s' " % component
     8         defectlist = self._dbselect(query)
     9         list = []
    10         for row in defectlist:
    11             list.append(row[0])
    12 
    13         return list
    14 
    15     def getSummary(self, id):
    16         query = "select summary from defects where ID='%d'" % id
    17         summary = self._dbselect(query)
    18         for row in summary:
    19             return row[0]
    20 
    21     def _dbselect(self, query):
    22         connection = sqlite3.connect('TMS')
    23         cursorObj = connection.cursor()
    24         results = cursorObj.execute(query)
    25         connection.commit()
    26         cursorObj.close()
    27         return results
    28 
    29 
    30 
    31 class DefectView:
    32     def summary(self, summary, defectid):
    33         print "#### Defect Summary for defect# %d####%s
    " %(defectid, summary)
    34 
    35     def defectList(self, list, category):
    36         print "#### Defect List for %s ####
    " % category
    37         for defect in list:
    38             print defect
    39 
    40 class Controller:
    41     def __init__(self):
    42         pass
    43 
    44     def getDefectSummary(self, defectid):
    45         model = DefectModel()
    46         view =  DefectView()
    47         summary_data = model.getSummary(defectid)
    48         return view.summary(summary_data, defectid)
    49 
    50     def getDefectList(self, component):
    51         model = DefectModel()
    52         view  = DefectView()
    53         defectlist_data = model.getDefectList(component)
    54         return view.defectList(defectlist_data, component)
    View Code

     使用模块:

    import mvc
    
    controller = mvc.Controller()
    
    print  controller.getDefectSummary(2)
    print  controller.getDefectList('ABC')

    总结:通过此mvc设计方法,看到了解耦的好处,个个模块独立,相互不影响,也可以增加模块。方便组合,方便拆卸。好好体会吧!

     

  • 相关阅读:
    小G的城堡
    最大公约数与扩展欧几里得算法
    阶乘的逆元
    素数的判断
    快速幂
    重载高精度运算符
    Hello World!
    【JavaScript】7-13 日K蜡烛图 (15分)
    【JavaScript】7-12 两个数的简单计算器 (10分)
    【JavaScript】7-11 分段计算居民水费 (10分)
  • 原文地址:https://www.cnblogs.com/lizhitai/p/4449540.html
Copyright © 2011-2022 走看看