Giới thiệu về mô hình MVC, ví dụ sử dụng ngôn ngữ Python
Tháng Mười Một 5, 2013 Bình luận về bài viết này
MVC là gì?
MVC là cách thiết kế ứng dụng thành các phần với các chức năng riêng biệt.
Lịch sử của MVC
MVC là viết tắt của Model-View-Controller. MVC được mô tả đầu tiên bởi Trygve_Reenskaug vào năm 1979. Tuy đã hơn 30 năm qua, nhưng khái niệm này không những bị lãng quên,… ngày nay, nó được dùng vào hầu hết các web framework và GUI framework, gồm có:
- Ruby On Rails: Một web-framework viết trên Ruby rất thịnh hành.
- Apple Cocoa: Apple’s framework cho phát triển các ứng dụng Mac OS và iOS.
- ASP.Net Framework: Microsoft’s web-framework để phát triển các ứng dụng web trên .NET.
- Apache Struts: Một Java web-framework rất phổ biến
- … và rất nhiều framework khác.
Các thành phần trong MVC
Model-View-Controller theo đúng như tên gọi của nó, được chia thành 3 phần chính:
Model: Kết nối với cơ sở dữ liệu và thực hiện các tương tác với cơ sở dữ liệu
View: Hiển thị trên giao diện(UI) các kiểu dữ liệu đó.
Controller: Nhận các tương tác của người dùng, điều hướng, gọi các hành vi từ Model và hiển thị lên View tương ứng.
Tuy rằng chưa có mẫu chuẩn MVC, nhưng các framework áp dụng MVC cũng không khác nhau nhiều. Các framework này đều cố gắng đạt được:
- Tách lớp trình diễn (Presentation) với lớp thao tác dữ liệu (Model)
- Tách lớp điều hướng(Controller) với lớp hiển thị (View)
Ví dụ sử dụng MVC trong Python
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import sqlite3 | |
class MVCModel: | |
def request(self, id): | |
# Would query database… | |
conn = sqlite3.connect('querydb') | |
c = conn.cursor() | |
results = c.execute('''select name from data where id = %d''' %id) | |
conn.commit() | |
c.close() | |
for row in results: | |
name = row[0] | |
return { "id" : id, "name": name} | |
class MVCController: | |
def __init__(self): | |
self.model = MVCModel() | |
self.view = MVCView() | |
def main(self): | |
post = self.model.request(1) | |
self.view.show(post) | |
class MVCView: | |
def show(self, post): | |
print "%(id)s %(name)s" % post | |
Controller = MVCController() | |
Controller.main() |