-
Model(模型)表示应用程序核心(比如数据库记录列表)。
-
View(视图)显示数据(数据库记录)。
-
Controller(控制器)处理输入(写入数据库记录)。
MVC 模式同时提供了对 HTML、CSS 和 JavaScript 的完全控制。
Model(模型)是应用程序中用于处理应用程序数据逻辑的部分。
通常模型对象负责在数据库中存取数据。
通常模型对象负责在数据库中存取数据。
View(视图)是应用程序中处理数据显示的部分。
通常视图是依据模型数据创建的。
通常视图是依据模型数据创建的。
Controller(控制器)是应用程序中处理用户交互的部分。
通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。
MVC 分层有助于管理复杂的应用程序,因为您可以在一个时间内专门关注一个方面。例如,您可以在不依赖业务逻辑的情况下专注于视图设计。同时也让应用程序的测试更加容易。
MVC 分层同时也简化了分组开发。不同的开发人员可同时开发视图、控制器逻辑和业务逻辑。
下面给出了一个用PyQt5写的登录窗口,基于MVC模式构建:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
import sys from functools import partial from PyQt5 import QtCore, QtGui, QtWidgets class Model: def __init__(self): self.username = "" self.password = "" def verify_password(self): return self.username == "USER" and self.password == "PASS" class View(QtWidgets.QWidget): verifySignal = QtCore.pyqtSignal() def __init__(self): super(View, self).__init__() self.username = "" self.password = "" self.initUi() def initUi(self): lay = QtWidgets.QVBoxLayout(self) title = QtWidgets.QLabel("<b>LOGIN</b>") lay.addWidget(title, alignment=QtCore.Qt.AlignHCenter) fwidget = QtWidgets.QWidget() flay = QtWidgets.QFormLayout(fwidget) self.usernameInput = QtWidgets.QLineEdit() self.usernameInput.textChanged.connect(partial(setattr, self, "username")) self.passwordInput = QtWidgets.QLineEdit(echoMode=QtWidgets.QLineEdit.Password) self.passwordInput.textChanged.connect(partial(setattr, self, "password")) self.loginButton = QtWidgets.QPushButton("Login") self.loginButton.clicked.connect(self.verifySignal) flay.addRow("Username: ", self.usernameInput) flay.addRow("Password: ", self.passwordInput) flay.addRow(self.loginButton) lay.addWidget(fwidget, alignment=QtCore.Qt.AlignHCenter) lay.addStretch() def clear(self): self.usernameInput.clear() self.passwordInput.clear() def showMessage(self): messageBox = QtWidgets.QMessageBox(self) messageBox.setText("your credentials are valid\n Welcome") messageBox.exec_() self.close() def showError(self): messageBox = QtWidgets.QMessageBox(self) messageBox.setText("your credentials are not valid\nTry again...") messageBox.setIcon(QtWidgets.QMessageBox.Critical) messageBox.exec_() class Controller: def __init__(self): self._app = QtWidgets.QApplication(sys.argv) self._model = Model() # 初始化模型 self._view = View() # 初始化视图 self.init() def init(self): self._view.verifySignal.connect(self.verify_credentials) def verify_credentials(self): self._model.username = self._view.username self._model.password = self._view.password self._view.clear() if self._model.verify_password(): self._view.showMessage() else: self._view.showError() def run(self): self._view.show() return self._app.exec_() if __name__ == '__main__': c = Controller() # 调用控制器 sys.exit(c.run()) |