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设计方法,看到了解耦的好处,个个模块独立,相互不影响,也可以增加模块。方便组合,方便拆卸。好好体会吧!

     

  • 相关阅读:
    使用 Dockerfile 定制镜像
    UVA 10298 Power Strings 字符串的幂(KMP,最小循环节)
    UVA 11090 Going in Cycle!! 环平均权值(bellman-ford,spfa,二分)
    LeetCode Best Time to Buy and Sell Stock 买卖股票的最佳时机 (DP)
    LeetCode Number of Islands 岛的数量(DFS,BFS)
    LeetCode Triangle 三角形(最短路)
    LeetCode Swap Nodes in Pairs 交换结点对(单链表)
    LeetCode Find Minimum in Rotated Sorted Array 旋转序列找最小值(二分查找)
    HDU 5312 Sequence (规律题)
    LeetCode Letter Combinations of a Phone Number 电话号码组合
  • 原文地址:https://www.cnblogs.com/lizhitai/p/4449540.html
Copyright © 2011-2022 走看看