Cơ bản về Model-View-Controller trong lập trình iOS


Model-View-Controller (MVC) là gì? Quả thật nếu các bạn mới học lập trình thì đây đúng là một khái niệm rất trừu tượng và khá khó hiểu. Trong thực tế, MVC đóng một vai trò rất quan trọng trong rất nhiều các nền tảng phát triển ứng dụng như .Net, J2EE và cụ thể là trong lĩnh vực phát triển ứng dụng trên iOS. Nếu các bạn đã đọc những bài viết trước đây của chúng tôi thì cũng có chỗ chúng tôi đã có nhắc đến khái niệm MVC nhưng chưa đi sâu vào mô hình này. Trong bài viết này, chúng tôi sẽ giúp các bạn có những khái niệm cơ bản nhất về MVC.

Model-View-Controller là design pattern quan trọng nhất

Model-View-Controller là một design pattern ứng dụng trong quá trình phát triển các ứng dụng iOS mà theo đó các đối tượng được tạo ra sẽ gán cho một trong ba nhóm vai trò sau: model, view hoặc controller. Pattern này không chỉ định nghĩa vai trò các đối tượng đảm nhiệm mà nó còn định nghĩa cách giao tiếp giữa các đối tượng với nhau. Các đối tượng có vai trò khác nhau sẽ ngăn cách theo đường phân cách trừu tượng của chúng, tuy nhiên chúng vẫn có thể giao tiếp được với nhau. Tập hợp các đối tượng của nhóm trong mô hình MVC được biết đến như một layer.

Model-View-Controller1

MVC là trung tâm của một thiết kế tốt cho một ứng dụng Cocoa. Những lợi ích của việc áp dụng mô hình này là rất nhiều. Trong ứng dụng, có nhiều đối tượng có xu hướng có thể tái sử dụng lại và giao diện của chúng có xu hướng được định nghĩa tốt hơn. Các ứng dụng xây dựng theo thiết kế MVC cũng dễ dàng mở rộng hơn so với các ứng dụng khác. Hơn thế nữa rất nhiều công nghệ và kiến trúc của ứng dụng đều dựa trên mô hình MVC.

Có lẽ cho đến lúc này thì bạn vẫn chưa hình dung cụ thể được về MVC đúng không? Tuy nhiên nếu các bạn đã thực hành qua loạt bài về xây dựng ứng dụng iPhone đầu tiên – HelloWorld thì thấy thực sự xuất hiện của mô hình MVC trong đó. Trong bài học đó, bạn đã tạo ra đối tượng model thông qua khai báo thuộc tính userName (một đối tượng NSString) trong lớp HelloWorldViewController, các đối tượng thể hiện của lớp HelloWorldViewControllerHelloWorldAppDelegate chính là các đối tượng controller, còn các đối tượng view chính là các text field, label, button hay background view.

Đối tượng Model

Một đối tượng Model đóng gói dữ liệu của một ứng dụng và định nghĩa logic hay các thao tác tính toán với dữ liệu đó. Ví dụ, một đối tượng Model có thể biểu diễn một ký tự trong game hoặc một contact trong sổ địa chỉ. Nhiều dữ liệu là một phần của trạng thái liên tục của ứng dụng (trạng thái liên tục có thể được lưu trữ trong file hoặc database) nên chứa trong các đối tượng Model sau khi dữ liệu được nạp vào trong ứng dụng. Bởi vì các đối tượng Model biểu diễn những kiến thức và nghiệp vụ liên quan cụ thể đến một nhóm vấn đề nghiệp vụ cụ thể, chúng có thể tái sử dụng trong các vấn đề tương tự. Một đối tượng Model “tinh khiết” không nên có kết nối rõ ràng tới các đối tượng View mà biểu diễn dữ liệu của nó và cho phép người dùng chỉnh sửa và nó không liên quan đến các vấn đề trình bầy và giao diện.

Các hành động của người dùng trong View layer mà tạo nên hay chỉnh sửa dữ liệu dùng để kết nối thông qua một đối tượng Controller và kết quả được tạo ra hay chỉnh sửa của một đối tượng Model. Khi một đối tượng Model thay đổi (ví dụ, dữ liệu mới được nhận thông qua kết nối qua mạng), nó sẽ thông báo tới đối tượng controller hãy cập nhật trên đối tượng view tương ứng.

Đối tượng View

Một đối tượng View là một đối tượng trong ứng dụng mà người dùng có thể nhìn thấy. Một đối tượng View biết làm thế nào để hiển thị bản thân nó và có thể đáp ứng những hành động của người dùng. Một mục đích chính của các đối tượng View là để hiển thị dữ liệu từ các đối tượng Model trong ứng dụng và cho phép người dùng chỉnh sửa những dữ liệu đó.

Bởi vì bạn thường sử dụng lại các đối tượng View và sau đó là cấu hình chúng trên ứng dụng nên các đối tượng View cung cấp tính nhất quán giữa các ứngd dụng. Tronng iOS, UIKit framework cung cấp một tập hợp các lớp View còn trong Mac OS X, AppKit framework cũng cung cấp một tập hợp tương tự. Trong UIKit, bất kỳ một đối tượng View đều thừa kế tới lớp UIView còn trong AppKit thì thừa kế tới lớp NSView.

Các đối tượng View tìm hiểu sự thay đổi trong dữ liệu Model thông qua các đối tượng Controller của ứng dụng và giao iêps với sự thay đổi do người sử dụng. Ví dụ, văn bản nhập vào text field thông qua đối controller tới một đối tượng Model của ứng dụng.

Controller Object

Một đối tượng Controller đóng vai trò trung gian giữa một hoặc nhiều đối tượng View với một hoặc nhiều đối tượng Model. Các đối tượng Controller vì thế là đường ống điều khiển mà đối tượng view tìm hiểu khi có sự thay đổi trong các đối tượng Model và ngược lại. Đối tượng Controller cũng có thể thể hiện nhiệm vụ thiết lập và phối hợp cho một ứng dụng và quản lý vòng đời của các đối tượng.

Một đối tượng Controller phiên dịch hành động của người dùng được thực hiện trong các đối tượng View và giao tiếp dữ liệu mới hoặc thay đổi tới các lớp Model. Khi đối tượng Model thay đổi, một đối tượng Controller thông báo có dữ liệu mới của đối tượng Model cho các đối tượng View để chúng có thể hiển thị dữ liệu đó.

Core Objects trong ứng dụng iOS của bạn

Từ thời điểm ứng dụng của bạn được khởi động bởi người dùng cho tới thời điểm ứng dụng kết thúc, UIKit framework quản lý rất nhiều hành vi cơ bản của ứng dụng. Trái tim của ứng dụng là đối tượng UIApplication mà nhận được các sự kiện từ hệ thống và chuyển chúng tới các đoạn mã của bạn để xử lý.

Để hiểu các đối tượng UIKit làm việc như thế nào với mã tùy chỉnh của bạn, bạn hãy tìm hiểu một chút về các đối tượng làm việc cho ứng dụng iOS. Minh hoạ sau đây sẽ biểu diễn các đối tượng thông dụng nhất trong ứng dụng iOS:

Model-View-Controller2
Như bạn thấy ở minh hoạ trên, ứng dụng iOS được tổ chức dựa trên Model-View-Controller design pattern. Pattern này phân chia riêng biệt các đối tượng dữ liệu trong Model với các đối tương View dùng để biểu diễn dữ liệu.

Để hiểu rõ hơn về ứng dụng của MVC trong việc phát triển ứng dụng iOS xin mời các bạn tiếp tục đọc bài hướng dẫn xây dựng ứng iPhone thứ 2.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: