Chuyển tới nội dung
Home » Mô Hình Mvc Java | Bài Toán Và Phân Tích

Mô Hình Mvc Java | Bài Toán Và Phân Tích

Java 81. Áp dụng mô hình MVC trong xây dựng chương trình và cách xử lý sự kiện

MVC là gì?

Mô hình MVC được giới thiệu lần đầu tiên bởi Trygve Reenskaug khi anh ta đang làm việc trong dự án Smalltalk ở công ty Xerox PARC ở California, Mỹ vào những năm 1970.
MVC được viết tắt bởi 3 từ: Model – View – Controller, là một mẫu thiết kế nhằm mục tiêu chia tách phần giao diện và code để dễ quản lý, phát triển và bảo trì.
Mô hình MVC chia một ứng dụng thành ba phần tương tác được với nhau, mỗi thành phần có một nhiệm vụ riêng biệt và độc lập với các thành phần khác.

  • Model: quản lý, xử lý dữ liệu
  • View: giao diện, hiển thị dữ liệu cho người dùng
  • Controller: điều khiển sự tương tác giữa Model và View
Minh họa mô hình MVC

Tại sao lại cần sử dụng mô hình MVC?

Bạn có thể hiểu đơn giản như sau, một công việc được giao cho nhiều người làm, theo từng công đoạn khác nhau thì chắc chắn hiệu suất của công việc sẽ tăng lên rất cao.
Và việc sử dụng một design pattern để xây dựng một ứng dụng cũng sẽ như vậy.
Hơn nữa, nó sẽ giúp quá trình bảo trì, nâng cấp phát triển sản phẩm trở nên dễ dạng hơn rất nhiều so với việc bạn không sử dụng một design pattern nào cả.
Cụ thể về chức năng các thành phần trong mô hình MVC như sau:
Model:

  • Có nhiệm vụ quản lý dữ liệu của ứng dụng
  • Chứa tất cả các nghiệp vụ logic, đối tượng mô tả dữ liệu
  • Thông báo cho view để hiện thị lại kết quả cho người dùng

View:

  • Chứa giao diện, tương tác với người dùng, sử dụng Model để hiển thị kết quả cho người dùng
  • Đưa ra kết quả từ tầng Controller
  • Thu nhận các hoạt động, yêu cầu của người dùng và chuyển cho tầng Controller xử lý

Controller:

  • Định nghĩa các hoạt động, xử lý của hệ thống
  • Đối chiếu các hành động của người dùng từ View. Đồng thời tương tác Model để gọi View và hiển thị thông tin tương ứng cho người dùng.

Ưu điểm của mô hình MVC là ứng dụng của bạn sẽ dễ nâng cấp và bảo trì do code của bạn được chia thành các thành phần độc lập.
Tuy nhiên đối với những dự án nhỏ thì việc áp dụng mô hình MVC sẽ gây cồng kềnh, tốn thời gian trong quá trình phát triển.
Ứng dụng MVC vào lập trình: MVC đang là mô hình được ứng dụng rất nhiều trong lập trình. Việc sử dụng mô hình tương đối đơn giản. Chỉ cần hiểu rõ quy trình vận hành, nắm được các chức năng của từng bộ phận thì việc triển khai mô hình MVC tương đối dễ dàng.
Hệ thống MVC phát triển tốt sẽ cho phép phát triển front end, back end cùng trên hệ thống mà không có sự can thiệp, chia sẻ, chỉnh sửa các tập tin trong khi một hoặc hai bên vẫn đang làm việc.
Biết cách áp dụng thuần thục mô hình MVC là điều kiện bắt buộc để bạn có thể đi làm Java thực tế.
> Nếu bạn đang tìm kiếm sự nghiệp với Java thật sự thì KHÓA HỌC JAVA (Full stack) được NIIT – ICT Hà Nội phối hợp với nhà tuyển dụng sẽ giúp bạn đạt mục tiêu nhanh hơn.

Ưu điểm và nhược điểm của MVC

Ưu điểm

Do được chia thành các thành phần độc lập nên Mô hình MVC giúp phát triển ứng dụng có code dễ đọc, dễ nâng cấp, bảo trì.

Thể hiện tính chuyên nghiệp trong việc tạo ứng dụng.

Nhược điểm

Đối với dự án nhỏ việc áp dụng mô hình MC gây cồng kềnh, tốn thời gian trong quá trình phát triển. Tốn thời gian trung chuyển dữ liệu của các thành phần.

Java 81. Áp dụng mô hình MVC trong xây dựng chương trình và cách xử lý sự kiện
Java 81. Áp dụng mô hình MVC trong xây dựng chương trình và cách xử lý sự kiện

Mô hình MVC

Mô hình MVC mà chúng ta thường thấy chia ứng dụng làm 3 phần: mô hình (Model), View và Controller. Trong đó model đại diện cho dữ liệu trong ứng dụng, view làm nhiệm vụ định dạng hiển thị cho dữ liệu và cuối cùng Controller xử lý sự kiện, có thể là sự kiện từ người dùng hoặc cũng chính nó tự sinh ra sự kiện. Nguyên gốc của mô hình MVC xuất phát từ ý tưởng chia tầng dữ liệu và tầng giao diện bằng một tầng ở giữa là Controller.

Thư viện Swing thì khác một tí, cả 2 phần View và Controller được gom lại làm một và được đặt tên là UI.

Trong Swing, tất cả mọi component đều có mô hình (model) của riêng nó, các mô hình lại được chia làm 2 loại là mô hình trạng thái và mô hình dữ liệu. Mô hình trạng thái lưu trữ trạng thái của component, ví dụ mô hình lưu giữ trạng thái của một button là đang được click hay đang được thả. Mô hình dữ liệu lưu trữ dữ liệu của component, chẳng hạn như một label lưu dữ liệu về text mà nó đang hiển thị.

Bản thân các component trong Swing đều được kế thừa từ một lớp model của riêng chúng, chẳng hạn như

JButton

kế thừa từ

JAbstractButton

, bên trong

JAbstractButton

có một thuộc tính là một đối tượng

ButtonModel

(bạn có thể tìm đọc trong bộ source của Java Swing), đối tượng này cung cấp các phương thức để lấy dữ liệu, thường thì nếu chúng ta muốn lấy dữ liệu thì chúng ta phải lấy đối tượng model này, nhưng lớp

JButton

thì lại có các phương thức lấy dữ liệu trực tiếp từ model luôn, nên bạn có thể lấy dữ liệu trực tiếp từ

JButton

mà không cần phải lấy đối tượng model trước.

public int getValue() { return getModel().getValue(); }

Ví dụ như phương thức

getValue()

ở trên (đây là đoạn code phương thức

getValue()

của một component trong mã nguồn Java Swing), chúng ta lấy dữ liệu trực tiếp luôn chứ không cần phải lấy một đối tượng component nào đó rồi mới lấy dữ liệu. Hơn nữa việc thao tác trực tiếp với component là không an toàn.

Khi một component được tạo thì mặc định một đối tượng model sẽ được tạo, chẳng hạn như với

JButton

thì lớp đại diện cho model của nó là

DefaultButtonModel

.

public JButton(String text, Icon icon) { // Create the model setModel(new DefaultButtonModel()); // initialize init(text, icon); }

Ở trên là đoạn code khởi tạo

JButton

trong bộ mã nguồn của Java Swing.

Ứng dụng mô hình kiến trúc MVC trong lập trình

Trong lập trình có nhiều ngôn ngữ được ứng dụng vào mô hình MVC nhưng thông dụng nhất là ASP.NET MVC, PHP MVC.

Bên cạnh đó, hệ thống MVC cũng cho phép người dùng phát triển front – end và back – end mà không phải can thiệp, hay chỉnh sửa, chia sẻ các tệp tin trong lúc 1 hoặc 2 lập trình viên đang làm việc.

Cách thức sử dụng mô hình MVC cũng rất đơn giản. Bạn chỉ cần hiểu các chức năng của 3 thành phần, quy trình vận hành là có thể triển khai MVC.

Mô hình MVC
Mô hình MVC

Mô hình MVC là gì?

Mô hình MVC là viết tắt của 3 từ Model, View và Controller. MVC là một mô hình thiết kế được dùng trong kỹ thuật phần mềm. Mô hình này gồm 3 thành phần được nhắc đến trong tên gọi, mỗi thành phần đều hoạt động độc lập và giữ một vai trò riêng biệt trong mô hình.

Trong đó:

Model (M)

Đóng vai trò lưu trữ tất cả các dữ liệu của ứng dụng. Nó là cầu nối giữa phần View và Controller. Thành phần Model được thể hiện dưới dạng cơ sở dữ liệu, thậm chí đôi khi nó chỉ đơn giản là tập tin XML. Model cũng thể hiện các thao tác làm việc với dữ liệu như xem, xử lý dữ liệu, truy xuất…

View (V)

Là phần giao diện. Tại View, người dùng có thể truy xuất dữ liệu của mô hình MVC thông qua tìm kiếm hoặc truy cập qua website.

Thông thường, MVC View được ứng dụng web sử dụng như một phần của hệ thống đã tạo ra thành phần HTML. Tiếp đến, View còn có thêm chức năng ghi lại tất cả các hoạt động của người dùng, sau đó sử dụng chúng để thực hiện việc tương tác với phần Controller. Mặc dù vậy, View và Controller lại không có bất kỳ mối quan hệ trực tiếp nào. Đồng thời, View cũng không được phép truy xuất, lấy dữ liệu từ Controller, mà nó chỉ có thể hiển thị các yêu cầu rồi chuyển đến cho Controller.

*Ví dụ: Bằng cách sử dụng View, người dùng tạo ra nút Delete. Khi người dùng nhấn nút này thì tạo ra một hành động trong phần Controller.

Controller (C)

View đưa đến Controller tất cả các yêu cầu của người dùng để nó thực hiện việc xử lý, rồi đưa dữ liệu phù hợp. Ngoài ra, Controller còn có thêm chức năng là kết nối với phần Model.

Mô hình MVC trong Java là gì? Ví dụ cụ thể ứng dụng mô hình MVC

Đối với những anh chị làm IT mảng lập trình thì mô hình MVC không có gì xa lạ. Họ thường xuyên sử dụng mô hình MVC để tạo ra những dự án thành công. Vậy mô hình MVC trong Java là gì? Lợi ích mô hình MVC mang đến? Ứng dụng của nó vào trong lập trình như thế nào?… Nếu bạn mới chập chững vào nghề còn nhiều thứ chưa nắm rõ về mô hình này thì hãy tham khảo ngay những chia sẻ từ LANIT trong bài viết dưới đây nhé!

Java - Giới thiệu ứng dụng Books Management vs mô hình MVC
Java – Giới thiệu ứng dụng Books Management vs mô hình MVC

Lời Kết

Trên đây là những giải đáp từ LANIT cho những câu hỏi được nhiều anh chị quan tâm: Mô hình MVC trong Java là gì? Chi tiết các thành phần trong MVC? Lý do nên sử dụng mô hình này, những ưu nhược điểm và những ví dụ cụ thể về MVC. Chúng tôi hy vọng rằng, các bạn đã nắm được các chức năng của phần mềm này và ứng dụng MVC vào công việc của mình để mang lại hiệu suất cao nhất trong các dự án.

Chúc các bạn thành công!

MVC là Design Pattern(mẫu thiết kế) được áp dụng rộng rãi trên hầu hết các ngôn ngữ lập trình hướng đối tượng hiện nay từ Java, C#, PHP, Visual C++ …. Trong bài viết này chúng ta sẽ làm rõ về MVC cũng như cách áp dụng nó từ thiết kế đến cài đặt trên ngôn ngữ lập trình Java. Hy vọng sẽ giúp các bạn rõ hơn về mô hình này.

MVC là gì?

MVC (viết tắt của Model-View-Controller) là một mẫu kiến trúc phần mềm hay mô hình thiết kế để tạo lập giao diện người dùng trên máy tính. MVC chia một ứng dụng thành ba phần tương tác được với nhau, mỗi thành phần có một nhiệm vụ riêng biệt và độc lập với các thành phần khác.

  • Model: Quản lý, xử lý dữ liệu.
  • View: Hiển thị dữ liệu cho người dùng.
  • Controller: Điều khiển sự tương tác giữa Model và View.

Mô hình MVC giúp tách biệt giữa cách thức mà dữ liệu được xử lý phía nội hàm và phần dữ liệu hiển thị phía người dùng. Ở đây Controller nhận được tất cả các yêu cầu cho ứng dụng và sau đó làm việc với Model để chuẩn bị dữ liệu cần thiết cho View. View sau đó sử dụng các dữ liệu được chuẩn bị bởi Controller để hiển thị cho người dùng.

Java Web - Servlet/Jsp - MVC Design Pattern
Java Web – Servlet/Jsp – MVC Design Pattern

Ưu điểm của mô hình MVC trong PHP, Java, C#, Laravel, Java swing

Mô hình MVC trong C# hay MVC nói chung đều sở hữu các ưu điểm nổi trội sau.

  • Dung lượng nhẹ, tiết kiệm bandwith: Nhờ không dùng viewstate nên MVC không tiêu tốn nhiều băng thông. Bên cạnh đó, người dùng hoàn toàn có thể dùng nó trên nền tảng web để gửi và nhận dữ liệu. Nhờ tiết kiệm băng thông nên tốc độ của website luôn được giữ ổn định.
  • Dễ dàng kiểm tra: MVC cung cấp chức năng kiểm tra, và rà soát lỗi phần mềm tiện lợi, dễ dàng. Điều này giúp đảm bảo sản phẩm đạt chất lượng hoàn hảo, chỉnh chu trước khi giới thiệu đến thị trường.
  • Javascript đóng vai trò rất quan trọng. Vì thế, nhờ việc dùng mô hình MVC, bạn có được bộ Control hiện đại, ưu việt trên nhiều nền tảng ngôn ngữ lập trình phổ biến hiện nay như PHP, C#, Java, …
  • View và size: Thành phần View đóng vai trò là nơi lưu trữ dữ liệu. Khi có nhiều yêu cầu từ máy khách thì kích thước của tệp tin sẽ lớn tương ứng, làm ảnh hưởng đến tốc độ load của website. Do đó, sử dụng MVC giúp tiết kiệm đáng kể lượng băng thông.
  • Chức năng SOC (viết tắt của Separation of Concern): Đây là tính năng cho phép người dùng có thể phân tách các thành phần như giao diện, dữ liệu, model, và nghiệp vụ.
  • Sự kết hợp: Sử dụng mô hình MVC, bạn dễ dàng viết code trên website để giảm tải cho máy chủ.
  • Đơn giản: Như đã đề cập ở trên, kết cấu của MVC khá đơn giản nên mang đến sự dễ dàng cho người sử dụng, ngay cả khi bạn không có nhiều am hiểu về lập trình.

>>Xem thêm: Các hình thức tấn công DDoS và cách khắc phục

Tạm kết

Như vậy mình và các bạn vừa tìm hiểu xong mô hình MVC và đã cùng nhau thực hành ví dụ lập trình MVC trong Java.
Hi vọng thông qua bài viết này sẽ giúp các bạn hiểu hơn về mô hình MVC và biết cách áp dụng nó trong project của mình.
Xin chào và hẹn gặp lại các bạn ở trong các bài viết tiếp theo.

HỌC VIỆN ĐÀO TẠO CNTT NIIT – ICT HÀ NỘI

Học Lập trình chất lượng cao (Since 2002). Học làm Lập trình viên. Hành động ngay!

Đc: Tầng 3, 25T2, N05, Nguyễn Thị Thập, Cầu Giấy, Hà Nội

SĐT: 02435574074 – 0914939543

Email: [email protected]

Fanpage: https://facebook.com/NIIT.ICT/

#niit #niithanoi #niiticthanoi #hoclaptrinh #khoahoclaptrinh #hoclaptrinhjava #hoclaptrinhphp #java #php #python

[Java Core] MVC với Java Console
[Java Core] MVC với Java Console

Ví dụ login sử dụng mô hình MVC trong Java

Tạo một project có cấu trúc như sau:

Tạo model: LoginModel.java

package vn.viettuts.mvc; public class LoginModel { private String userName; private String password; public LoginModel() { } public LoginModel(String userName, String password) { super(); this.userName = userName; this.password = password; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }

Tạo view: LoginView.java

Lớp này chứa 2 phương thức:

  • Phương thức showMessage(): hiển thị thông tin cho người dùng.
  • Phương thức getUserInfo(): được sử dụng để thu thập thông tin user mà người dùng nhập.

package vn.viettuts.mvc; import java.util.Scanner; public class LoginView { public static Scanner scanner = new Scanner(System.in); public void showMessage(String smg) { System.out.println(smg); } public LoginModel getUserInfo() { LoginModel user = new LoginModel(); System.out.print(“Username: “); user.setUserName(scanner.next()); System.out.print(“Password: “); user.setPassword(scanner.next()); return user; } }

Tạo controller: LoginController.java

package vn.viettuts.mvc; public class LoginController { private LoginView view; public LoginController(LoginView view) { this.view = view; } public void login() { while (true) { LoginModel user = view.getUserInfo(); if (checkLogin(user)) { view.showMessage(“success!”); break; } else { view.showMessage(“wrong username or password!”); } } } private boolean checkLogin(LoginModel user) { if ((user.getUserName().equals(“admin”)) && (user.getPassword().equals(“admin”))) { return true; } return false; } public LoginView getView() { return view; } public void setView(LoginView view) { this.view = view; } }

Tạo lớp App.java chứa hàm main để chạy ứng dụng.

package vn.viettuts.mvc; public class App { public static void main(String[] args) { LoginView view = new LoginView(); LoginController control = new LoginController(view); // goi ham login control.login(); } }

Kết quả:

MVC là một design pattern (mẫu thiết kế) phổ biến được áp dụng trên hầu hết các ngôn ngữ lập trình hướng đối tượng hiện nay từ Java, C#, PHP, Visual C++ ….
Và trong bài viết ngày hôm nay, mình cùng các bạn sẽ tìm hiểu về mô hình MVC cũng như cách áp dụng nó từ thiết kế đến lập trình MVC trong Java.
Nội dung của bài viết này gồm:

  • Hiểu rõ hơn về mô hình MVC
  • Thực hành, sử dụng mô hình MVC trong Java thông qua ví dụ

Ưu và nhược điểm mô hình MVC

Một điều mà trước khi sử dụng mô hình MVC, các lập trình viên đều rất quan tâm đến điểm mạnh và những điểm yếu của nó mang lại? Vậy ưu điểm và nhược điểm mô hình MVC là gì? Mời bạn tiếp tục tìm hiểu trong những chia sẻ tiếp theo!

Ưu điểm mô hình MVC

  • Mô hình MVC mang đến sự chuyên nghiệp trong lập trình và phân tích đối tượng.
  • Phần mềm có băng thông nhẹ nên hoạt động của website sẽ ổn định hơn.
  • Dễ dàng kiểm tra thông tin, phát hiện lỗi phần mềm.
  • Các thành phần trong ứng dụng được phân tách rõ ràng và độc lập khiến cho việc sử dụng, thao tác các lệnh trở nên đơn giản, thuận tiện hơn. Việc nâng cấp, bảo trì từng thành tố cũng dễ dàng.
  • Model – View – Controller dù độc lập nhưng lại có mối quan hệ tương tác với nhau. Nó tạo nên một thể nhất quán trong quá trình lập trình.
  • MVC hỗ trợ test driven development, có thể tạo ra ứng dụng với unit test.

Nhược điểm mô hình MVC

  • MVC chưa thực sự thích hợp với các ứng dụng nhỏ.
  • Sử dụng mô hình MVC tốn rất nhiều thời gian, dễ gây ra áp lực trong khi lập trình.
  • Đòi hỏi người dùng phải có kiến thức để vận dụng.
  • Mô hình này sử dụng rất nhiều ngôn ngữ lập trình khác nhau nên có thể tạo ra sự cồng kềnh trong quá trình trung chuyển dữ liệu.
Giải Đề Thi LTHĐT Java - P2: Thiết kế các lớp theo mô hình MVC
Giải Đề Thi LTHĐT Java – P2: Thiết kế các lớp theo mô hình MVC

Ứng dụng mô hình MVC trong lập trình

Mô hình MVC được ứng dụng trong rất nhiều ngôn ngữ khác nhau. Các ngôn ngữ được ứng dụng nhiều nhất, đó là PHP MVC, Java MVC và ASP.NET MVC. Bên cạnh đó, nó còn được ứng dụng để phát triển tốt cả front end và back end trong cùng một hệ thống.

Việc ứng dụng mô hình MVC trong Java Swing giúp cho việc thiết kế web cũng rất đơn giản hơn. Các lập trình viên chỉ cần nắm rõ chức năng của từng thành phần là có thể triển khai. Đối với các dự án lớn, mô hình MVC giúp giảm thiểu chi phí, thời gian và mang lại hiệu quả cao. Bởi phần mềm được tích hợp các tính năng hữu ích và hiện đại nhất.

Luồng xử lý trong MVC

Luồng xử lý trong của mô hình MVC, bạn có thể hình dung cụ thể và chi tiết qua từng bước dưới đây:

  • Khi một yêu cầu của từ máy khách (Client) gửi đến Server. Thì bị Controller trong MVC chặn lại để xem đó là URL request hay sự kiện.
  • Sau đó, Controller xử lý input của user rồi giao tiếp với Model trong MVC.
  • Model chuẩn bị data và gửi lại cho Controller.
  • Cuối cùng, khi xử lý xong yêu cầu thì Controller gửi dữ liệu trở lại View và hiển thị cho người dùng trên trình duyệt.

Ở đây, View không giao tiếp trực tiếp với Model. Sự tương tác giữa View và Model sẽ chỉ được xử lý bởi Controller.

TOP 3 NGÀNH NGHỀ DỄ BÙNG NỔ THỜI GIAN TỚI
TOP 3 NGÀNH NGHỀ DỄ BÙNG NỔ THỜI GIAN TỚI

Component có 2 model

Có một số component có tới 2 model,

JList

là một ví dụ, 2 model của

JList



ListModel

à

ListSelectionModel

. Trong đó

ListModel

là một model dữ liệu, model này lưu trữ danh sách các item trong list, cũng như tính chất của các item đó,

ListSelectionModel

là một model trạng thái, lưu trữ trạng thái của các item, chẳng hạn như item thứ mấy đang được chọn bởi người dùng…

import java.awt.Container; import java.awt.EventQueue; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing.DefaultListModel; import javax.swing.GroupLayout; import static javax.swing.GroupLayout.Alignment.CENTER; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JList; import javax.swing.JOptionPane; import javax.swing.JScrollPane; import javax.swing.ListSelectionModel; public class ListModels extends JFrame { private DefaultListModel model; private JList list; private JButton remallbtn; private JButton addbtn; private JButton renbtn; private JButton delbtn; public ListModels() { initUI(); } private void createList() { model = new DefaultListModel(); model.addElement(“Amelie”); model.addElement(“Aguirre, der Zorn Gottes”); model.addElement(“Fargo”); model.addElement(“Exorcist”); model.addElement(“Schindler’s list”); list = new JList(model); list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); list.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { if (e.getClickCount() == 2) { int index = list.locationToIndex(e.getPoint()); Object item = model.getElementAt(index); String text = JOptionPane.showInputDialog(“Rename item”, item); String newitem = null; if (text != null) { newitem = text.trim(); } else { return; } if (!newitem.isEmpty()) { model.remove(index); model.add(index, newitem); ListSelectionModel selmodel = list.getSelectionModel(); selmodel.setLeadSelectionIndex(index); } } } }); } private void createButtons() { remallbtn = new JButton(“Remove All”); addbtn = new JButton(“Add”); renbtn = new JButton(“Rename”); delbtn = new JButton(“Delete”); addbtn.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { String text = JOptionPane.showInputDialog(“Add a new item”); String item = null; if (text != null) { item = text.trim(); } else { return; } if (!item.isEmpty()) { model.addElement(item); } } }); delbtn.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent event) { ListSelectionModel selmodel = list.getSelectionModel(); int index = selmodel.getMinSelectionIndex(); if (index >= 0) { model.remove(index); } } }); renbtn.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { ListSelectionModel selmodel = list.getSelectionModel(); int index = selmodel.getMinSelectionIndex(); if (index == -1) { return; } Object item = model.getElementAt(index); String text = JOptionPane.showInputDialog(“Rename item”, item); String newitem = null; if (text != null) { newitem = text.trim(); } else { return; } if (!newitem.isEmpty()) { model.remove(index); model.add(index, newitem); } } }); remallbtn.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { model.clear(); } }); } private void initUI() { createList(); createButtons(); JScrollPane scrollpane = new JScrollPane(list); Container pane = getContentPane(); GroupLayout gl = new GroupLayout(pane); pane.setLayout(gl); gl.setAutoCreateContainerGaps(true); gl.setAutoCreateGaps(true); gl.setHorizontalGroup(gl.createSequentialGroup() .addComponent(scrollpane) .addGroup(gl.createParallelGroup() .addComponent(addbtn) .addComponent(renbtn) .addComponent(delbtn) .addComponent(remallbtn)) ); gl.setVerticalGroup(gl.createParallelGroup(CENTER) .addComponent(scrollpane) .addGroup(gl.createSequentialGroup() .addComponent(addbtn) .addComponent(renbtn) .addComponent(delbtn) .addComponent(remallbtn)) ); gl.linkSize(addbtn, renbtn, delbtn, remallbtn); pack(); setTitle(“JList models”); setLocationRelativeTo(null); setDefaultCloseOperation(EXIT_ON_CLOSE); } public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { @Override public void run() { ListModels ex = new ListModels(); ex.setVisible(true); } }); } }

Trong ví dụ này, chúng ta hiển thị một

JList

và 4 button. Các button sẽ điều khiển

JList

.

model = new DefaultListModel(); model.addElement(“Amelie”); model.addElement(“Aguirre, der Zorn Gottes”); …

Đầu tiên chúng ta tạo một model cho

JList

và thêm các item vào đó.

list = new JList(model); list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

Tiếp theo chúng ta tạo một đối tượng

JList

và thiết lập chế độ chỉ cho phép chọn một item tại một thời điểm.

if (text != null) { item = text.trim(); } else { return; } if (!item.isEmpty()) { model.addElement(item); }

Chúng ta chỉ thêm item vào list nếu item đó không rỗng.

ListSelectionModel selmodel = list.getSelectionModel(); int index = selmodel.getMinSelectionIndex(); if (index >= 0) { model.remove(index); }

Đoạn code trên thực hiện xóa các item, đầu tiên chúng ta lấy ra số thứ tự của item đang được chọn bằng phương thức

getMinSelectionIndex()

từ model của

JList

. Sau đó dùng phương thức

remove()

để xóa item này.

Trong ví dụ này mình dùng cả 2 model và dùng cả 2 phương pháp là sử dụng model và dùng phương thức trực tiếp của component. Các phương thức

add()

,

remove()

,

clear()

là dùng trực tiếp phương thức của component, còn lấy item đang được chọn là lấy từ model.

Ví dụ mô hình MVC trong lập trình

Để giúp các bạn hiểu rõ hơn về mô hình MVC trong Java là gì, chúng tôi xin đưa ra demo ứng dụng đăng nhập thông qua user và mật khẩu. Trong demo sử dụng IDE Eclipse.

Bước 1: Chúng ta sẽ bắt đầu bằng việc tạo một project, với 4 class (như hình)

Bước 2: Thiết lập trong Model với các thành phần (như hình)

Bước 3: Tạo View

Đối với thành phần này có 2 phương thức để tạo View trong MVC mà các lập trình có thể ứng dụng:

  • ShowMessage(): Có tính năng hiển thị thông tin cho người sử dụng.
  • GetUserInfo(): dùng để thu thập thông tin user mà người dùng đăng nhập vào web.

Bước 4: Kiểm tra tài khoản và mật khẩu người dùng trong Controller. Nếu thông tin chính xác nghĩa là sẽ đăng nhập thành công.

Bước 5: Kiểm tra kết quả hiển thị trong Main

Bước 6: Xem kết quả sau khi chạy chương trình MVC trong Java

ASP.NET Core MVC 6.0 Full Course (Beginner)
ASP.NET Core MVC 6.0 Full Course (Beginner)

Bài toán và phân tích

Để bạn dễ hiểu MVC và cách sử dụng nó, chúng ta sẽ sử dụng MVC để cài đặt cho chức năng Login của ứng dụng ATM mà chúng ta đã nói ở bài Học lập trình hướng đối tượng với Java.

Mô tả chức năng Login như sau:

  • Màn hình Login của ATM sẽ hiển thị thông tin yêu cầu số PIN(AccountNo) và Password.
  • Hệ thống sẽ nhận thông tin từ người dùng và chuyển cho lớp Account để kiểm tra.
  • Nếu thông tin số PIN và Password đúng thì trả về Login thành công, Nếu sai thì trả về Login thất bại.

Bản vẽ thiết kế Sequence Diagram cho chức năng này như sau:

Hình 2- Bản vẽ Sequence Diagram của chức năng Login

Trong đó:

  • Lớp System đại diện cho các giao diện màn hình.
  • Lớp Account mô tả tài khoản trong hệ thống.

Để hiểu rõ hơn về bản vẽ này bạn đọc thêm bài Bản vẽ Class Diagram

Theo mô hình trên thì phần Code business và tương tác giữa 2 lớp bạn sẽ viết trong lớp giao diện hoặc lớp Account nên hầu hết các ngôn ngữ cho bạn viết code xen lẫn với HTML. Chính điều này gây khó hiểu cho người mới học.

Bây giờ chúng ta sẽ áp dụng thiết kế MVC để thiết kế cho chức năng này. Bằng cách tách lớp Giao diện ra thành View và Controller ta sẽ có bản vẽ Sequence Diagram như sau:

Bản vẽ thiết kế Sequence Diagram sau khi áp dụng MVC:

  • Lớp login: thể hiện giao diện có thể cài đặt bằng file login.html hoặc login.jsp
  • loginResult: cũng là file HTML hoặc JSP
  • loginController: là lớp điều khiển cho ứng dụng này. Sử dụng Sevlet.
  • Lớp Account: sử dụng Java bình thường.

Hình 3- Chức năng Login sau khi thiết kế theo MVC

Sơ đồ này cho chúng ta thấy gần với quá trình cài đặt hơn.

Cập nhật các phương thức và lớp mới vào sơ đồ lớp chúng ta sẽ có:

Hình 4- Class Diagram của chức năng MVC

Trong đó:

  • Login và loginResult: là các file HTML thuần túy đóng vai trò là View.
  • loginController đóng vai trò là Controller viết bằng Sevlet
  • Account: đóng vai trò là Model viết bằng Java.

Thoạt nhìn bạn thấy khá phức tạp vì nó phát sinh thêm lớp Control và loginResult nhưng thực ra nó sẽ tách phần code Java ra riêng với code HTML sẽ làm cho ứng dụng của chúng ta sáng sủa hơn và gần với quá trình cài đặt ứng dụng hơn.

Ưu và nhược điểm của MVC

Ưu điểm mô hình MVC

  • Đầu tiên, nhắc tới ưu điểm mô hình MVC thì đó là băng thông (Bandwidth) nhẹ vì không sử dụng viewstate nên khá tiết kiệm băng thông. Việc giảm băng thông giúp website hoạt động ổn định hơn.
  • Kiểm tra đơn giản và dễ dàng, kiểm tra lỗi phần mềm trước khi bàn giao lại cho người dùng.
  • Một lợi thế chính của MVC là nó tách biệt các phần Model, Controller và View với nhau.
  • Sử dụng mô hình MVC chức năng Controller có vai trò quan trọng và tối ưu trên các nền tảng ngôn ngữ khác nhau
  • Ta có thể dễ dàng duy trì ứng dụng vì chúng được tách biệt với nhau.
  • Có thể chia nhiều developer làm việc cùng một lúc. Công việc của các developer sẽ không ảnh hưởng đến nhau.
  • Hỗ trợ TTD (test-driven development). Chúng ta có thể tạo một ứng dụng với unit test và viết các won test case.
  • Phiên bản mới nhất của MVC hỗ trợ trợ thiết kế responsive website mặc định và các mẫu cho mobile. Chúng ta có thể tạo công cụ View của riêng mình với cú pháp đơn giản hơn nhiều so với công cụ truyền thống.

Nhược điểm mô hình MVC

Bên cạnh những ưu điểm MVC mang lại thì nó cũng có một số nhược điểm cần khắc phục.

MVC đa phần phù hợp với công ty chuyên về website hoặc các dự án lớn thì mô hình này phù hợp hơn so với với các dự án nhỏ, lẻ vì khá là cồng kềnh và mất thời gian.

  • Không thể Preview các trang như ASP.NET.
  • Khó triển khai.
What is programming MVC? [Detailed Explanation]
What is programming MVC? [Detailed Explanation]

Cài đặt ứng dụng ATM trên Java sử dụng MVC

Phần trên chúng ta đã phân tích về mặt thiết kế, bây giờ chúng ta sẽ đi cài đặt ứng dụng trên với Java. Hy vọng sẽ giúp các bạn hiểu sau hơn về mô hình này. Để thực hiện được bài này bạn phải biết cơ bản về lập trình Java và Sevlet.

Chúng ta sử dụng sơ đồ lớp ở trên và cài đặt nó trên ngôn ngữ lập trình Java. Trước tiên để cài đặt ứng dụng này máy tính của bạn phải cài đặt Tomcat và NetBean và cấu hình chúng chạy thành công. Xem cách cài đặt Tomcat và NetBean ở đây.

Cài đặt phần View

Trước tiên chúng ta sẽ cài đặt giao diện cho ứng dụng. Phần View là trang login.html như sau:

Hình 5- Trang Login

Hình 6- Đoạn code HTML của trang Login

Hình 7- Đoạn code CSS của trang Login

Tất nhiên bạn cần có kiến thức về HTML, CSS để cài đặt đoạn này. Nếu chưa biết về HTML và CSS bạn có thể xem thêm bài Giới thiệu về HTML.

Cài đặt phần Model

Phần model bao gồm 2 lớp như sau:

  • Account: là lớp mô tả về tài khoản. Chúng ta đã mô tả kỹ ở bài “Học lập trình hướng đối tượng với Java”.
  • AccountDB: là lớp bổ sung để kết nối với CSDL. Chúng ta sẽ nhận AccountID do người dùng nhập vào, sau đó vào CSDL để lấy thông tin của ID tương ứng và tạo đối tượng của lớp Account. Phần này gọi là Object Relational Mapping(ORM) sẽ được mô tả kỹ ở bài tiếp theo. Bài này chúng ta tạm thời thiết lập cứng giá trị.

Hình 8- Đoạn code lớp Account

Hình 9- Đoạn code lớp AccountDB

Cài đặt phần Controller

Như đã giới thiệu ở trên Controller có trách nhiệm kết nối phần View và Model cũng như xử lý các vấn đề nghiệp vụ liên quan. Phần này viết bằng Java. Có nhiều cách cài đặt phần này như sử dụng Sevlet hoặc dùng Spring Framework… ở đây chúng ta sử dụng Servlet để cài đặt. Để tạo ra Controller chúng ta thực hiện các bước sau:

Bước 1: Tạo Servlet

Từ cửa sổ Project của NetBean, kích chuột phải -> New -> Sevlet

Hình 10- Tạo Sevlet

Đặt tên Sevlet và kích Finish để tạo một Servlet

Hình 11- Tạo Sevlet -2

Hình 12- Sevlet khi mới tạo

Trong đó:

@WebServlet(name = “loginServlet1”, urlPatterns = {“/loginServlet1”})

WebServlet annotation: có mục đích cấu hình Sevlet. Khi có annotation này đặt trước class thì trình biên dịch nhận biết đó là một Sevlet class. Bạn có thể dùng cách này hoặc dùng file web.xml để thay thế.

processRequest method: đây là phương thức được sử dụng để viết Code cho Sevlet thực hiện chức năng Controller.

doGet, doPost methods: là 2 phương thức đáp ứng request của người dùng khi người dùng đặt phương thức get hay post trong file login.html. Hai phương thức này đều gọi lại processRequest() nên bạn chỉ cần viết lệnh trong processRequest() là đủ. Chi tiết vì sao sử dụng override doGet(), doPost bạn nên tìm đọc một bài về Sevlet để hiểu rõ hơn.

getServletInfo() method: nhằm mục đích mô tả thông tin về Sevlet.

Bước 2: Viết mã lệnh cho Sevlet

Hình 13- Code cua Sevlet

Trong đó:

  • Lấy Account Number và Password từ trang Login gửi sang thông qua HTTP Request. Mỗi khi người dùng kích nào nút Submit trên form HTML thì các thông tin từ Form sẽ được gói gửi kèm đến trang xử lý được chỉ định trong phần action của form.
  • Gọi phương thức getAccount() từ lớp AccountDB để tạo ra đối tượng tương ứng với AccountID đề nghị đăng nhập.
  • Gọi kiểm tra lấy kết quả và xây dựng trang kết quả trả về. Nếu bạn muốn trả về một trang có sẵn thì sử dụng phương thức .forward() của getSevletContext() để trả về kết quả cho trang đó.

Bước 3: Cấu hình ứng dụng để chạy

Để ứng dụng chạy được, bạn phải khai báo đúng urlPatterns vào thuộc tính action của form login. Lúc đó hệ thống mới chạy được.

@WebServlet(name = “loginServlet1”, urlPatterns = {“/LoginServlet“})

Phần bôi đậm và bôi đen này phải trùng nhau.

Trong trường hợp bạn đã có sẵn trang kết quả như LoginResult.jsp hoặc Thanks.jsp bạn có thể sửa lại đoạn code trên processRequest như sau:

Hình 14- Đoạn Code của Sevlet khi trang kết quả đã có sẵn tên là thanks.jsp

Sau đó bạn dùng jsp để truy cập dữ liệu từ lớp account chuyển sang để hiển thị kết quả.

Như vậy chúng ta đã xây dựng được một ứng dụng nhỏ về MVC trên Java. Bạn có thể lấy đoạn mã lệnh của ứng dụng ở đây để tham khảo thêm. Download.

Cài đặt MVC Pattern như thế nào?

Các thành phần tham gia MVC Pattern:

  • Model : là nơi lưu trữ dữ liệu người dùng, chứa business logic. Nó cho phép truy xuất dữ liệu để hiển thị hoặc thu thập dữ liệu. Model là cầu nối giữa thành phần View và Controller. Mục đích quan trọng nhất của nó là kết nối cơ sở dữ liệu (database), xử lý dữ liệu và chuẩn bị dữ liệu để chuyển đến các thành phần khác.
  • View : là giao diện của hệ thống, nơi dữ liệu (Model) được hiển thị, nhận tương tác trực tiếp với người dùng. Trong ứng dụng web, View là một phần của hệ thống, nơi mà các mã HTML được sinh ra và hiển thị. Một vấn đề quan trọng là View không được lấy dữ liệu trực tiếp từ Controller mà phải thông qua Model.
  • Controller : nhận yêu cầu, dữ liệu từ người dùng, sau đó cập nhật sang Model và cuối cùng trả kết quả lại View để show kết quả cho người dùng. Controller không chứa bất kỳ logic nghiệp vụ nào.

Ví dụ sử dụng MVC Pattern

Giả sử chúng ta có một ứng dụng quản lý cho phép hiển thị thông tin chi tiết, chỉnh sửa thông tin của Sinh viên. Chương trình của chúng ta như sau:

StudentModel.java

package com.gpcoder.patterns.other.mvc; import java.time.LocalDate; import lombok.AllArgsConstructor; import lombok.Data; @Data @AllArgsConstructor public class StudentModel { private Integer id; private String name; private LocalDate updatedDate; public boolean save() { if (name.length() <= 10) { this.updatedDate = LocalDate.now(); return true; } return false; } }

StudentView.java

package com.gpcoder.patterns.other.mvc; import java.time.format.DateTimeFormatter; public class StudentView { public void showHomePage() { System.out.println(“Home page of Student”); } public void showDetailPage(StudentModel student) { System.out.println(“Student: “); System.out.println(“+ Id: ” + student.getId()); System.out.println(“+ Name: ” + student.getName()); System.out.println(“+ Updated date: ” + student.getUpdatedDate().format(DateTimeFormatter.ofPattern(“dd/MM/yyyy”))); System.out.println(“—————————“); } public void showUpdatedPage(StudentModel student) { System.out.println(“Saved successfully”); showDetailPage(student); } public void showErrorMessage() { System.out.println(“ERROR!!!”); } }

StudentController.java

package com.gpcoder.patterns.other.mvc; import java.time.LocalDate; public class StudentController { private StudentModel student; private StudentView view; public StudentController() { student = new StudentModel(1, “No Name”, LocalDate.now()); view = new StudentView(); } public void showDetail() { view.showDetailPage(student); } public void changeName(String newName) { student.setName(newName); } public void save() { boolean isSuccess = student.save(); if (isSuccess) { view.showUpdatedPage(student); } else { view.showErrorMessage(); } } }

MVCPatternExample.java

package com.gpcoder.patterns.other.mvc; public class MVCPatternExample { public static void main(String[] args) { StudentController controller = new StudentController(); controller.showDetail(); controller.changeName(“gpcoder”); controller.save(); controller.changeName(“Java Design Pattern – MVC”); controller.save(); } }

Output của chương trình:

Student: + Id: 1 + Name: No Name + Updated date: 17/02/2019 ————————— Saved successfully Student: + Id: 1 + Name: gpcoder + Updated date: 17/02/2019 ————————— ERROR!!!

Trong ví dụ trên, chúng ta thấy:

  • StudentModel : đóng vai trò là một Model, chứa thông tin của sinh viên (id, name) và logic xử lý lưu thông tin sinh viên (save).
  • StudentView : đóng vai trò là một View, dùng để show thông tin của sinh viên (Model).
  • StudentController : đóng vai trò là một Controller, nhận yêu cầu từ User (showDetail, changeName, save), cập nhật thông tin vào Model (setName), chứa flow điều khiển gọi xử lý lưu thông tin từ Model (save), xác định View nào sẽ được hiển thị (showDetailPage, showUpdatedPage, showErrorMessage).
  • MVCPatternExample : đóng vai trò là một User, chỉ có thể thao tác với Controller để xem thông tin Model từ View.
Mô hình MVC là gì - Lập trình PHP với mô hình MVC - cách tách layout chuẩn
Mô hình MVC là gì – Lập trình PHP với mô hình MVC – cách tách layout chuẩn

Mô hình MVC trong Java là gì?

MVC được viết tắt từ Model View Controller. Đây là mô hình phần mềm dùng để tạo lập giao diện người dùng trên máy tính. Mô hình MVC bao gồm ba bộ phận chính là Model, View và Controller. Mỗi thành phần có chức năng, nhiệm vụ khác nhau nhưng giữa chúng có sự tương tác qua lại, hỗ trợ nhau. Trong đó:

  • Model có chức năng quản lý và xử lý dữ liệu.
  • View có nhiệm vụ hiển thị dữ liệu cho người dùng.
  • Controller có chức năng điều khiển tương tác giữa Model và View.

Mô hình MVC trong Java giúp lập trình viên dễ dàng tách biệt giữa cách thức dữ liệu nội hàm với dữ liệu hiển thị. Sự tương tác qua lại giữa ba thành tố Model, View, Controller tạo nên hiệu quả tốt nhất cho việc lập trình. Chúng ta sẽ tìm hiểu chi tiết hơn về chức năng của từng thành phần trong MVC trong phần tiếp theo để từ đó hiểu và ứng dụng tốt nhất nhé!

Quan tâm dịch vụ chất lượng tại LANIT: Mua Vps tốc độ cao

Các kỹ năng cần thiết khi sử dụng mô hình kiến trúc

Khi bạn đã hiểu MVC là gì, thì nó giúp ích cho bạn có được một kiến thức cần thiết và nó là một trong các kỹ năng cần thiết khi bạn làm lập trình. Để sử dụng tốt mô hình kiến trúc này bạn cần có các kỹ năng và kiến thức dưới đây:

  • Hiểu rõ về mô hình kiến trúc phần mềm (MVC).
  • Hiểu cách sử dụng framework.
  • Có kiến thức cơ bản về lập trình hướng đối tượng.
  • Có khả năng logic và hiển thị nội dung, đảm bảo được rằng Model và View độc lập với nhau.
[FREE] Source code website java JSP SERVLET báo cáo cuối kỳ lập trình website 9đ
[FREE] Source code website java JSP SERVLET báo cáo cuối kỳ lập trình website 9đ

Nhà cung cấp Tên Miền – Hosting – VPS tốt nhất Việt Nam

Là đơn vị thuộc top 3 lĩnh vực dịch vụ lưu trữ website tại Việt Nam, Hosting Việt được đánh giá là nhà cung cấp tên miền giá rẻ và Hosting giá rẻ cũng như luôn nhận được nhiều lời giới thiệu từ diễn đàn tin học về nơi mua Host ở đâu tốt . Chỉ từ 50.000đ/tháng, người dùng đã có ngay cho mình một Host để thỏa sức học tập, nghiên cứu hoặc chạy demo website,… Bên cạnh đó, Hosting Việt còn là đơn vị luôn tiên phong trong công nghệ điện toán đám mây (Cloud Hosting), gói thuê server với băng thông khủng không giới hạn.

Hosting Việt có đa dạng gói dịch vụ, bên cạnh những gói giá siêu rẻ 50.000đ/tháng, nhà cung cấp còn có những vps giá rẻ chất lượng dành cho nhiều nhóm doanh nghiệp khác nhau. Các gói này luôn đáp ứng đủ nhu cầu lưu trữ, truy cập hàng chục nghìn người mỗi ngày.

Ngoài ra, với dịch vụ chăm sóc khách hàng chuyên nghiệp, đội ngũ kỹ thuật viên có chuyên môn cao sẽ nhanh chóng hỗ trợ, xử lý các vấn đề phát sinh. Từ đó, giúp người dùng có được sự trải nghiệm mượt mà, thú vị.

Như vậy, qua bài viết trên Hosting Việt đã giúp bạn có thêm nhiều thông tin bổ ích! Hi vọng bạn sẽ có thể trang bị thêm thật nhiều kiến thức khác mà chúng tôi đã chia sẻ! Nếu có bất kỳ thắc mắc hay câu hỏi nào cần giải đáp, hãy liên hệ ngay với Hosting Việt để được hỗ trợ và tư vấn nhanh chóng, miễn phí nhé!

Trong phần này chúng ta sẽ tìm hiểu về mô hình mà các component trong Java Swing sử dụng.

Bộ thư viện Swing được thiết kế dựa theo mô hình MVC (Model View Controller) cho phép thao tác với dữ liệu một cách tiện lợi và nhanh chóng.

Lý do nên dùng mô hình MVC trong Java Swing

Sau đây là các lý do bạn nên sử dụng MVC Java Swing, và mô hình MVC nói chung

Rút ngắn quy trình lập trình được nhanh chóng hơn bởi khả năng làm việc song song nhiều tác vụ

Ví dụ, khi MVC được sử dụng trong việc phát triển phần mềm hay ứng dụng web thì lập trình viên làm việc trên View, còn lập trình viên khác làm việc trên Controller để thiết lập tính logic cho phần mềm, ứng dụng web. Điều này cho thấy, vận dụng mô hình MVC sẽ rút ngắn tiến độ hoàn thành của dự án.

Cung cấp nhiều chế độ View

Với MVC, bạn dễ dàng thiết lập nhiều chế độ View cho một mô hình. Do đó, tận dụng chức năng này sẽ giúp bạn phát triển ứng dụng, phần mềm với nhiều cách thức truy cập. Đồng thời, nó giúp hạn chế việc nhân bản code, do dữ liệu và logic nghiệp vụ được tách biệt khỏi màn hình.

Điều chỉnh, sửa đổi không gây ảnh hưởng mô hình

Trong các ứng dụng web, user interface thường xuyên thay đổi. Điển hình như chuyển đổi font chữ, màu sắc, bố cục màn hình, hoặc thêm thiết bị hỗ trợ cho thiết bị di động (máy tính bảng, điện thoại)…

Đối với mô hình MVC, thao tác thêm kiểu view mới cực kỳ đơn giản. Do Model và View hoàn toàn độc lập nên khi có sự thay đổi trong Model, thì nó không gây bất kỳ ảnh hưởng nào đến các phần còn lại có trong kiến trúc MVC.

Trả dữ liệu và không cần định dạng

Thêm một tính năng của MVC pattern là nó trả về dữ liệu nhưng không cần sử dụng định dạng. Vì thế, những thành phần giống nhau được dùng cho bất cứ giao diện nào.

Ví dụ: Các loại dữ liệu của mô hình MVC trong Laravel được định dạng bằng HTML. Ngoài ra, có thể dữ liệu cũng được định dạng bằng Dream Viewer, Macromedia Flash.

Hỗ trợ kỹ thuật Asynchronous

Tiếp đến, MVC còn hỗ trợ kỹ thuật Asynchronous, góp phần giúp các lập trình viên phát triển ứng dụng với tốc độ tải nhanh.

Thân thiện với SEO

MVC giúp phát triển website thân thiện với SEO, bằng cách tạo các URL thân thiện để thu hút nhiều lượt truy cập.

>>Xem thêm: Vmware Vsphere Là Gì? Tài Liệu Vmware Vsphere Tiếng Việt Mới Nhất

Java MVC Example | Simple and Easy Java Tutorial
Java MVC Example | Simple and Easy Java Tutorial

Lịch sử của MVC

MVC được tiến sĩ Trygve Reenskaug đưa vào ngôn ngữ lập trình Smalltalk-76 khi ông đến trung tâm Nghiên cứu Xerox Palo Alto (PARC) vào giữa năm 1970. Sau đó, việc triển khai trở nên phổ biến trong các phiên bản khác của Small- Talk. Năm 1988, các bài báo “The Journal of Object Technology” – JOT mang lại bước tranh toàn cảnh về MVC mang liệu sự hiệu quả tốt nhất.

Các thành phần trong MVC

Model

  • Là bộ phận có nhiệm vụ quản lý dữ liệu của ứng dụng.
  • Chức năng biểu diễn, vận chuyển thông tin để trình diễn (view) và xử lý (control)
  • Chứa tất cả các nghiệp vụ logic, đối tượng mô tả dữ liệu, …

View

  • Tương tác với người sử dụng.
  • Show kết quả từ tầng Controller.
  • Thu nhận các hoạt động, request của người sử dụng và chuyển cho tầng Controller xử lý.
  • Hiểu một cách đơn giản, View là hệ thống các frame, cửa sổ của ứng dụng; các trang giao diện web: html, jsp; Các bảng, mẫu biểu, báo cáo.

Controller

  • Định nghĩa các hành vi, hoạt động, xử lý của hệ thống.
  • Đối chiếu hành động của người sử dụng từ View. Đồng thời tương tác Model để gọi View và hiển thị thông tin tương ứng cho người dùng.
[MVC] Routes & Controllers
[MVC] Routes & Controllers

Vì sao nên sử dụng mô hình MVC?

Quy trình phát triển nhanh hơn

MVC hỗ trợ phát việc phát triển nhanh chóng và song song. Nếu một mô hình MVC được dùng để phát triển bất kỳ ứng dụng web cụ thể nào, một lập trình viên có thể làm việc trên View và một developer khác có thể làm việc với Controller để tạo logic nghiệp vụ cho ứng dụng web đó.

Do đó, ứng dụng mô hình MVC có thể được hoàn thành nhanh hơn ba lần so với các ứng dụng mô hình khác.

Khả năng cung cấp nhiều chế độ view

Trong mô hình MVC, bạn có thể tạo nhiều View cho chỉ một mô hình. Ngày nay, nhu cầu có thêm nhiều cách mới để truy cập ứng dụng và đang ngày càng tăng. Do đó, việc sử dụng MVC để phát triển chắc chắn là một giải pháp tuyệt vời.

Hơn nữa, với phương pháp này, việc nhân bản code rất hạn chế. Vì nó tách biệt dữ liệu và logic nghiệp vụ khỏi màn hình.

Các sửa đổi không ảnh hưởng đến toàn bộ mô hình

Đối với bất kỳ ứng dụng web nào, người dùng có xu hướng thay đổi thường xuyên. Bạn có thể quan sát thông qua những thay đổi thường xuyên về màu sắc, font chữ, bố cục màn hình. Hay là thêm hỗ trợ thiết bị mới cho điện thoại hay máy tính bảng…

Việc thêm một kiểu view mới trong MVC rất đơn giản. Vì phần Model không phụ thuộc vào phần View. Do đó, bất kỳ thay đổi nào trong Model sẽ không ảnh hưởng đến toàn bộ kiến trúc.

MVC Model trả về dữ liệu mà không cần định dạng

MVC pattern có thể trả về dữ liệu mà không cần áp dụng bất kỳ định dạng nào. Do đó, các thành phần giống nhau có thể được sử dụng với bất kỳ giao diện nào.

Ví dụ: tất cả loại dữ liệu đều có thể được định dạng bằng HTML. Ngoài ra, nó cũng có thể được định dạng bằng Macromedia Flash hay Dream Viewer.

Hỗ trợ kỹ thuật Asynchronous

Kiến trúc MVC có thể được tích hợp với cả JavaScript Framework. Có nghĩa là, các ứng dụng MVC có thể hoạt động ngay cả với các file PDF, trình duyệt riêng cho web hay các widget trên desktop.

Ngoài ra, MVC cũng hỗ trợ kỹ thuật Asynchronous, giúp các developer phát triển các ứng dụng có thể load rất nhanh.

Nền tảng MVC thân thiện với SEO

Nền tảng MVC hỗ trợ phát triển các trang web thân thiện với SEO. Bằng nền tảng này, bạn có thể dễ dàng phát triển các URL thân thiện với SEO để tạo ra nhiều lượt truy cập hơn.

Những ngôn ngữ như JavaScript hay jQuery có thể được tích hợp với MVC. Từ đó phát triển nhiều ứng dụng web giàu tính năng, đặc biệt là với mô hình MVC trong Java.

Triển khai

Chúng ta sẽ tạo một đối tượng Student hoạt động như một Model.

StudentView sẽ là một lớp View có thể in chi tiết sinh viên trên Controller và StudentController là lớp điều khiển chịu trách nhiệm lưu trữ dữ liệu trong đối tượng Student và cập nhật View StudentView.

Bước 1: Tạo Model Student.java

public class Student { private String rollNo; private String name; public String getRollNo() { return rollNo; } public void setRollNo(String rollNo) { this.rollNo = rollNo; } public String getName() { return name; } public void setName(String name) { this.name = name; } }

Bước 2: Tạo View StudentView.java

public class StudentView { public void printStudentDetails(String studentName, String studentRollNo){ System.out.println(“Student: “); System.out.println(“Name: ” + studentName); System.out.println(“Roll No: ” + studentRollNo); } }

Bước 3: Tạo Controller StudentController.java

public class StudentController { private Student Model; private StudentView View; public StudentController(Student Model, StudentView View){ this.Model = Model; this.View = View; } public void setStudentName(String name){ Model.setName(name); } public String getStudentName(){ return Model.getName(); } public void setStudentRollNo(String rollNo){ Model.setRollNo(rollNo); } public String getStudentRollNo(){ return Model.getRollNo(); } public void updateView(){ View.printStudentDetails(Model.getName(), Model.getRollNo()); } }

Bước 4: MVCPatternDemo.java

public class MVCPatternDemo { public static void main(String[] args) { //fetch student record based on his roll no from the database Student Model = retriveStudentFromDatabase(); //Create a View : to write student details on console StudentView View = new StudentView(); StudentController Controller = new StudentController(Model, View); Controller.updateView(); //update Model data Controller.setStudentName(“John”); Controller.updateView(); } private static Student retriveStudentFromDatabase(){ Student student = new Student(); student.setName(“Robert”); student.setRollNo(“10”); return student; } }

Bước 5: Kiểm tra kết quả

Student: Name: Robert Roll No: 10 Student: Name: John Roll No: 10

Author: Mai Công Sơn

Đăng ký nhận bộ tài liệu học Java trên 2 trang giấy tại đây

Xem thêm: Java Coding Bootcamp là gì? Tổng quan về Java Coding Bootcamp

Ai làm quen hay đã tiếp cận đến lập trình web thì không thể không biết MVC là gì? Vì MVC đều xuất hiện và áp được ứng dụng vào trong các dự án web. Dưới đây, Vietnix sẽ giới thiệu và mô tả cụ thể chi tiết về mô hình MVC, thành phần và nó mô hình này áp dụng vào lập trình như thế nào?

Dự án mẫu - Thiết kế web | Bài 07.2: Tổ chức thư mục lập trình theo mô hình MVC | Thầy Hộ FpolyHCM
Dự án mẫu – Thiết kế web | Bài 07.2: Tổ chức thư mục lập trình theo mô hình MVC | Thầy Hộ FpolyHCM

Tìm hiểu mô hình MVC là gì?

MVC là viết tắt của cụm từ “Model-View-Controller“. Đây là mô hình thiết kế được sử dụng trong kỹ thuật phần mềm. MVC là một mẫu kiến trúc phần mềm để tạo lập giao diện người dùng trên máy tính. MVC chia thành ba phần được kết nối với nhau và mỗi thành phần đều có một nhiệm vụ riêng của nó và độc lập với các thành phần khác. Tên gọi 3 thành phần:

  • Model (dữ liệu): Quản lí xử lí các dữ liệu.
  • View (giao diện): Nới hiển thị dữ liệu cho người dùng.
  • Controller (bộ điều khiển): Điều khiển sự tương tác của hai thành phần Model và View.

Mô hình MVC (MVC pattern) thường được dùng để phát triển giao diện người dùng. Nó cung cấp các thành phần cơ bản để thiết kế một chương trình cho máy tính hoặc điện thoại di động, cũng như là các ứng dụng web.

Model của JButton

Mô hình được tạo sẵn cho JButton còn được dùng cho một số component phổ biến khác như check box, radio box, menu item… Loại mô hình của các component này là mô hình trạng thái.

import java.awt.Container; import java.awt.EventQueue; import java.awt.event.ActionEvent; import javax.swing.AbstractAction; import javax.swing.DefaultButtonModel; import javax.swing.GroupLayout; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; public class ButtonModel extends JFrame { private JButton okbtn; private JLabel enabledLbl; private JLabel pressedLbl; private JCheckBox cb; public ButtonModel() { initUI(); } private void initUI() { Container pane = getContentPane(); GroupLayout gl = new GroupLayout(pane); pane.setLayout(gl); okbtn = new JButton(“OK”); okbtn.addChangeListener(new DisabledChangeListener()); cb = new JCheckBox(); cb.setAction(new CheckBoxAction()); enabledLbl = new JLabel(“Enabled: true”); pressedLbl = new JLabel(“Pressed: false”); gl.setAutoCreateContainerGaps(true); gl.setAutoCreateGaps(true); gl.setHorizontalGroup(gl.createParallelGroup() .addGroup(gl.createSequentialGroup() .addComponent(okbtn) .addGap(80) .addComponent(cb)) .addGroup(gl.createParallelGroup() .addComponent(enabledLbl) .addComponent(pressedLbl)) ); gl.setVerticalGroup(gl.createSequentialGroup() .addGroup(gl.createParallelGroup() .addComponent(okbtn) .addComponent(cb)) .addGap(40) .addGroup(gl.createSequentialGroup() .addComponent(enabledLbl) .addComponent(pressedLbl)) ); pack(); setTitle(“ButtonModel”); setLocationRelativeTo(null); setDefaultCloseOperation(EXIT_ON_CLOSE); } private class DisabledChangeListener implements ChangeListener { @Override public void stateChanged(ChangeEvent e) { DefaultButtonModel model = (DefaultButtonModel) okbtn.getModel(); if (model.isEnabled()) { enabledLbl.setText(“Enabled: true”); } else { enabledLbl.setText(“Enabled: false”); } if (model.isPressed()) { pressedLbl.setText(“Pressed: true”); } else { pressedLbl.setText(“Pressed: false”); } } } private class CheckBoxAction extends AbstractAction { public CheckBoxAction() { super(“Disabled”); } @Override public void actionPerformed(ActionEvent e) { if (okbtn.isEnabled()) { okbtn.setEnabled(false); } else { okbtn.setEnabled(true); } } } public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { @Override public void run() { ButtonModel ex = new ButtonModel(); ex.setVisible(true); } }); } }

Chúng ta tạo một button, một checkbox và 3 label, các label này hiển thị dữ liệu về trạng thái của button như có đang được click hay không, đang bật hay đang bị vô hiệu hóa…

okbtn.addChangeListener(new DisabledChangeListener());

Chúng ta dùng lớp

ChangeListener

để lắng nghe sự thay đổi trạng thái của button.

DefaultButtonModel model = (DefaultButtonModel) okbtn.getModel();

Để lấy đối tượng model thì chúng ta dùng phương thức

getModel()

.

if (model.isEnabled()) { enabledLbl.setText(“Enabled: true”); } else { enabledLbl.setText(“Enabled: false”); }

Chúng ta dùng phương thức

isEnabled()

để biết button đang dùng được hay đang bị vô hiệu hóa và cập nhật lên label.

if (okbtn.isEnabled()) { okbtn.setEnabled(false); } else { okbtn.setEnabled(true); }

Check box sẽ bật/tắt button nhưng ở đây chúng ta không dùng model mà dùng phương thức

setEnabled()

để thay đổi trực tiếp luôn.

public void setEnabled(boolean b) { if (!b && model.isRollover()) { model.setRollover(false); } super.setEnabled(b); model.setEnabled(b); }

Đoạn code trên là mã nguồn của phương thức

JCheckBox.setEnable()

, như bạn thấy thực chất khi gọi phương thức này

JCheckBox

tự động lấy model của nó và thiết lập thông tin từ model đó.

What is Model View Controller AKA MVC 🖥
What is Model View Controller AKA MVC 🖥

Tại sao lập trình viên nên sử dụng mô hình MVC trong lập trình?

Lý do để các lập trình viên phải sử dụng mô hình MVC là gì? Đó là:

  • MVC giúp phát triển nhanh chóng bất kỳ ứng dụng web nào. Nó có thể hoàn thành công việc sớm gấp 3 lần so với các mô hình khác.
  • Cho phép tạo nhiều view trong một mô hình, giúp các Coder thoải mái sáng tạo.
  • Các thành phần trong MVC hoạt động độc lập nên các sửa đổi không gây ảnh hưởng đến toàn bộ mô hình.
  • MVC Model có thể trả về dữ liệu mà không cần định dạng. Phần mềm cho phép các thành phần giống nhau hiển thị trên mọi giao diện.
  • Nền tảng MVC rất thân thiện với seo. Nhờ đó có thể dễ dàng phát triển các URL thân thiện, giúp seo tốt hơn để thu hút lượng người truy cập.
  • MVC tích hợp với cả JavaScript Framework nên các ứng dụng trong MVC hoạt động được với cả file PDF. Ngoài ra, MVC còn hỗ trợ kỹ thuật Asynchronous, giúp các nhà sáng chế phát triển được các ứng dụng load nhanh.

Các thành phần trong mô hình MVC trong Java

Model

Một trong những thành phần quan trọng nhất của mô hình MVC trong Java. Đây là bộ phận làm nhiệm vụ quản lý dữ liệu. Model có chức năng vận chuyển thông tin từ nội hàm để hiển thị đến người dùng thông qua màn hình và xử lý các thông tin để người dùng dễ dàng tiếp cận nhất.

Model hoàn toàn độc lập với các thành phần còn lại trong MVC và nó chứa các tác vụ cần thiết nhất cho quá trình lập trình .

View

Thành phần tiếp theo chúng ta sẽ nhắc đến ở mô hình MVC trong Java, đó là View. Đối với người dùng thì View có vai trò thiết yếu. Nó thực hiện nhiệm vụ tạo tương tác với người dùng và hiển thị các kết quả từ tầng Controller. Đồng thời, View cũng thực hiện việc tiếp nhận các hoạt động, yêu cầu của người dùng để chuyển đến Controller xử lý.

Nói một cách dễ hiểu. Các thành phần trong MVC giống như một website. View chính là các trang giao diện hiển thị những gì mà người dùng nhìn thấy

Controller

Khi nhắc tới các thành phần ở mô hình MVC nhất định không thể bỏ qua Controller. Nếu không có thành phần này thì mọi hoạt động của Model hay View đều không còn giá trị.

Controller thực hiện chức năng kết nối tương tác giữa View và Model. Nó định nghĩa các lệnh và thực hiện xử lý các lệnh trong hệ thống. Controller đối chiếu hành động của người dùng từ View và tương tác với Model để chuyển tải thông tin cần thiết đến người dùng.

JavaFX Full Tutorial - Cafe Shop Management System with Source Code
JavaFX Full Tutorial – Cafe Shop Management System with Source Code

Ví dụ lập trình form đăng nhập sử dụng mô hình MVC trong Java

Trong phần này, chúng ta sẽ đi vào demo một chương trình đơn giản có sử dụng mô hình MVC.
Ở đây, mình sẽ demo ứng dụng đăng nhập thông qua tài khoản, mật khẩu.
Ở đây mình sử dụng IDE Eclipse. Bạn nào chưa biết sử dụng thì…
> Học cách sử dụng Eclipse
Đầu tiên chúng ta sẽ tạo một project, trong đó có 4 class như sau:

Cấu trúc thư mục ví dụ lập trình MVC trong Java

Trong Model:

public class LoginModel {

private String user;

private String pass;

public LoginModel() {}

public LoginModel(String _user, String _pass) {

this.user = _user;

this.pass = _pass;

public String getUser() {

return user;

public void setUser(String _user) {

this.user = _user;

public String getPass() {

return pass;

public void setPass(String _pass) {

this.pass = _pass;

Trong View:

import java.util.Scanner;

public class LoginView {

public static Scanner scanner = new Scanner(System.in);

public void showMessage(String msg) {

System.out.println(msg);

public LoginModel getInfo() {

System.out.println(“_____LOGIN_____”);

System.out.println();

LoginModel user = new LoginModel();

System.out.print(“Username: “);

user.setUser(scanner.next());

System.out.print(“Password: “);

user.setPass(scanner.next());

return user;

Trong Controller chúng ta sẽ kiểm tra xem tài khoản và mật khẩu người dùng nhập vào có đúng không.
Nếu đúng thì đăng nhập thành công.

public class LoginController {

private LoginView view;

public LoginController(LoginView view) {

this.view = view;

private boolean check(LoginModel user) {

if ((user.getUser().equals(“admin”))

&& (user.getPass().equals(“123”))) {

return true;

return false;

public void login() {

while (true) {

LoginModel user = view.getInfo();

if (check(user)) {

view.showMessage(“Login successfully”);

break;

} else {

view.showMessage(“Wrong username or password”);

Trong Main:

public class MVCPattern {

public static void main(String[] args) {

LoginView view = new LoginView();

LoginController control = new LoginController(view);

control.login();

Kết quả sau khi chạy chương trình:

Kết quả của ví dụ lập trình MVC trong Java

Câu hỏi thường gặp

Ai là đối tượng cần học những hình thức MVC?

Mô hình MVC được dùng tại hầu hết những nền tảng lập trình và đối tượng phù hợp để học các thiết kế này là tổng quan các lập trình viên (Từ Lập trình phần mềm cho đến Lập trình web …).

Có thể nói rằng bất kì lập trình viên nào cũng phải học về mô hình MVC.

Những kỹ năng để sử dụng mô hình MVC?

Để sử dụng mô hình MVC bạn cần có nền tảng kiến thức về lập trình web. Việc thực hành lập trình, viết kịch bản dựa trên các ngôn ngữ kiến thức căn bản như PHP, Java, Python hoặc C # sẽ giúp cho người dùng học sử dụng hình thức MVC tốt hơn.

Tại sao nên sử dụng mô hình MVC?

Lý do nên sử dụng Mô hình MVC là việc MVC tách biệt phần View khỏi Model và Controller.

Nó giúp phân tách phần hiển thị và phần dữ liệu và cho phép sửa đổi trong từng dữ liệu mà không có sự ảnh hưởng đến các dữ liệu khác.

Hiện nay, MVC được sử dụng rộng rãi cho các trang web trong nhiều loại dự án khác nhau. Một số Framework như JavaScript MVC, Ember JS và Backbone còn hỗ trợ một phần của quy trình MVC trên máy khách.

Spring Boot 07 - Model View Controller | JMaster.io Trung Tâm Java
Spring Boot 07 – Model View Controller | JMaster.io Trung Tâm Java

Lợi ích của MVC Pattern là gì?

  • MVC cho phép phát triển ứng dụng nhanh chóng. Chúng ta có thể tạo một Model trước và chuyển thông tin này cho nhóm phát triển giao diện người dùng. Họ có thể bắt đầu implement phần View song song với đội Backend implement Controller và logic để phát triển nhanh hơn.
  • Giảm độ phức tạp của code.
  • Tăng khả năng tái sử dụng.
  • Giảm bớt sự phụ thuộc trong code, dễ bảo trì, dễ nâng cấp hơn.

Tài liệu tham khảo:

  • https://www.tutorialspoint.com/design_pattern/mvc_pattern.htm
  • https://www.oracle.com/technetwork/articles/javase/mvc-136693.html
  • https://www.journaldev.com/16974/mvc-design-pattern

Khi tiếp cận với việc lập trình web, ứng dụng hay phần mềm thì bạn không thể bỏ qua cái tên mô hình MVC. Nếu bạn chưa biết về mô hình lập trình này thì đừng bỏ qua bài chia sẻ tổng hợp sau đây nhé!

Tìm hiểu các thành phần trong mô hình MVC

Mô hình MVC gồm 3 loại chính là thành phần bên trong không thể thiếu khi áp dụng mô hình này:

  • Model: Là bộ phận có chức năng lưu trữ toàn bộ dữ liệu của ứng dụng và là cầu nối giữa 2 thành phần bên dưới là View và Controller. Một model là dữ liệu được sử dụng bởi chương trình. Đây có thể là cơ sở dữ liệu, hoặc file XML bình thường hay một đối tượng đơn giản. Chẳng hạn như biểu tượng hay là một nhân vật trong game.
  • View: Đây là phần giao diện (theme) dành cho người sử dụng. View là phương tiện hiển thị các đối tượng trong một ứng dụng. Chẳng hạn như hiển thị một cửa sổ, nút hay văn bản trong một cửa sổ khác. Nó bao gồm bất cứ thứ gì mà người dùng có thể nhìn thấy được.
  • Controller: Là bộ phận có nhiệm vụ xử lý các yêu cầu người dùng đưa đến thông qua View. Một controller bao gồm cả Model lẫn View. Nó nhận input và thực hiện các update tương ứng.

Ví dụ: một Controller có thể cập nhật một Model bằng cách thay đổi các thuộc tính của nhân vật trong game. Và nó có thể sửa đổi view bằng cách hiển thị nhân vật được cập nhật trong game đó.

JSP 31. Áp dụng mô hình MVC trong xây dựng website
JSP 31. Áp dụng mô hình MVC trong xây dựng website

Luồng tương tác của các phần trong mô hình kiến trúc MVC

Để hiểu về luồng tương tác giữa các thành phần M, V, C, chúng tôi lấy ví dụ về mô hình MVC như sau:

Trong trang quản trị của website có chức năng tạo bài viết mới. Trong chức năng này có 2 trường gồm trường tiêu đề, trường nội dung bài viết. Trong đó:

  • View: Thực hiện nhiệm vụ hiển thị phần nhập thông tin của Tiêu đề và Nội dung.
  • Controller: Thực hiện việc lấy dữ liệu từ 2 trường trên rồi gửi đến phần Model.
  • Model: Thực hiện nhiện vụ nhận các dữ liệu từ Controller và lưu lại trong cơ sở dữ liệu.

Như vậy có thể thấy, mỗi thành phần thực hiện một nhiệm vụ nhất định và giữa chúng có sự liên kết, thống nhất với nhau. Tất cả tạo nên mô hình MVC gọn, nhẹ. Ngoài ra, nó cũng có thể được tích hợp thêm nhiều tính năng trong ASP.NET, ví dụ Quá trình xác thực (Authentication).

Tùy chỉnh Model

Trong phần này chúng ta làm lại những gì đã làm ở trên, chỉ khác là chúng ta sẽ sử dụng model do chúng ta tự thiết kế.

import java.awt.Container; import java.awt.EventQueue; import java.awt.event.ActionEvent; import javax.swing.AbstractAction; import javax.swing.ButtonModel; import javax.swing.DefaultButtonModel; import javax.swing.GroupLayout; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JFrame; import static javax.swing.JFrame.EXIT_ON_CLOSE; import javax.swing.JLabel; public class ButtonModel2 extends JFrame { private JButton okbtn; private JLabel enabledLbl; private JLabel pressedLbl; private JCheckBox cb; public ButtonModel2() { initUI(); } private void initUI() { Container pane = getContentPane(); GroupLayout gl = new GroupLayout(pane); pane.setLayout(gl); okbtn = new JButton(“OK”); cb = new JCheckBox(); cb.setAction(new CheckBoxAction()); enabledLbl = new JLabel(“Enabled: true”); pressedLbl = new JLabel(“Pressed: false”); OkButtonModel model = new OkButtonModel(); okbtn.setModel(model); gl.setAutoCreateContainerGaps(true); gl.setAutoCreateGaps(true); gl.setHorizontalGroup(gl.createParallelGroup() .addGroup(gl.createSequentialGroup() .addComponent(okbtn) .addGap(80) .addComponent(cb)) .addGroup(gl.createParallelGroup() .addComponent(enabledLbl) .addComponent(pressedLbl)) ); gl.setVerticalGroup(gl.createSequentialGroup() .addGroup(gl.createParallelGroup() .addComponent(okbtn) .addComponent(cb)) .addGap(40) .addGroup(gl.createSequentialGroup() .addComponent(enabledLbl) .addComponent(pressedLbl)) ); pack(); setTitle(“MVC”); setLocationRelativeTo(null); setDefaultCloseOperation(EXIT_ON_CLOSE); } private class OkButtonModel extends DefaultButtonModel { @Override public void setEnabled(boolean b) { if (b) { enabledLbl.setText(“Enabled: true”); } else { enabledLbl.setText(“Enabled: false”); } super.setEnabled(b); } @Override public void setPressed(boolean b) { if (b) { pressedLbl.setText(“Pressed: true”); } else { pressedLbl.setText(“Pressed: false”); } super.setPressed(b); } } private class CheckBoxAction extends AbstractAction { public CheckBoxAction() { super(“Disabled”); } @Override public void actionPerformed(ActionEvent e) { if (okbtn.isEnabled()) { okbtn.setEnabled(false); } else { okbtn.setEnabled(true); } } } public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { @Override public void run() { ButtonModel2 ex = new ButtonModel2(); ex.setVisible(true); } }); } }

Chúng ta thiết kế lại giao diện như trong ví dụ trước, chỉ khác là chúng ta không dùng đến các listener nữa mà sử dụng đối tượng model kế thừa do chúng ta tự thiết kế.

ButtonModel model = new OkButtonModel(); okbtn.setModel(model);

Để thiết lập model thì chúng ta sử dụng phương thức

setModel()

.

private class OkButtonModel extends DefaultButtonModel { … }

Chúng ta tạo model button riêng và override một số phương thức cần thiết.

@Override public void setEnabled(boolean b) { if (b) { enabledLbl.setText(“Enabled: true”); } else { enabledLbl.setText(“Enabled: false”); } super.setEnabled(b); }

Chúng ta override phương thức

setEnabled()

và cập nhật lại text trên label, sau đó chúng ta phải gọi phương thức

setEnabled()

của lớp cha để cập nhật sự thay đổi.

[MVC] Model
[MVC] Model

Luồng xử lý trong mô hình MVC trong Java

Luồng xử lý trong các mô hình MVC Java, PHP,… nói riêng và mô hình MVC nói chung được mô tả như sau.

Khi có yêu cầu từ máy khách gửi đến máy chủ, thì yêu cầu đó sẽ bị chặn lại bởi Controller để kiểm tra nó là URL request hay sự kiện. Tiếp đến, Controller sẽ tiến hành xử lý input của user. Sau đó, nó lại tiếp tục giao tiếp với phần Model của MVC.

Kế đến, Model tiến hành chuẩn bị dữ liệu và thực hiện gửi chúng cho Controller. Sau cùng, Controller gửi trả lại dữ liệu cho View để View hiển thị trên trình duyệt cho người dùng.

Như vậy, theo luồng xử lý này dễ dàng thấy được View và Model không giao tiếp trực tiếp với nhau. Sự tương tác giữa chúng sẽ do Controller xử lý.

Ứng dụng mô hình MVC vào lập trình như thế nào?

Ngôn ngữ lập trình và framework mà bạn dùng phụ thuộc nhiều hơn vào mục đích nghề nghiệp. Nhưng lập trình MVC dưới dạng kiến trúc sẽ luôn là một lựa chọn khả thi để phát triển nghề nghiệp của bạn.

Ví dụ, mọi người đang dần chuyển từ Dotnet MVC sang Dotnet Core. Nhưng hiện nay, vẫn còn nhu cầu về Django cũng sử dụng MVC.

Bài 3 - Giải Thích Mô Hình MVC Trong Spring Framework
Bài 3 – Giải Thích Mô Hình MVC Trong Spring Framework

Mô hình MVC là gì?

Mô hình MVC là viết tắt của Model – View – Controller. Mẫu này được sử dụng để phân tách mối quan tâm của ứng dụng.

  • Model – Model đại diện cho một đối tượng hoặc dữ liệu. Nó cũng có thể có logic để cập nhật Controller nếu dữ liệu của nó thay đổi.
  • View – View thể hiện trực quan hóa dữ liệu của Model.
  • Controller – Controller hoạt động trên cả Model và View. Nó kiểm soát luồng dữ liệu vào đối tượng Model và cập nhật View mỗi khi dữ liệu thay đổi. Nó giữ cho View và Model riêng biệt.

MVC Pattern là gì?

Model – View – Controller (MVC) Pattern là một mẫu thiết kế nhằm mục tiêu chia tách phần giao diện và code để dễ quản lý, phát triển và bảo trì.

MVC Pattern là một dạng Architectural Design Pattern được áp dụng để xử lý các vấn đề liên quan đến kiến trúc ứng dụng.

MVC Pattern tuân thủ nguyên tắc thiết kế Separation of Concern, giúp phân tách logic của các tầng (layer) khác nhau trong một chương trình thành các đơn vị độc lập.

MVC chia ứng dụng phần mềm ra làm 3 phần có tương tác với nhau: Model (dữ liệu), View (giao diện), Controller (điều khiển tương tác giữa Model và View).

Java Swing-09: Thiết kế sơ đồ lớp theo mô hình MVC.
Java Swing-09: Thiết kế sơ đồ lớp theo mô hình MVC.

Cách sử dụng MVC

Để minh họa rõ hơn về MVC, Vietnix sẽ minh họa cho bạn một ứng dụng web hiển thị tất cả các khải niệm và hoạt động của MVC là gì?

Ví dụ minh họa: Ứng dụng My Car Clicker là một biến thể của Cat Clicker nổi tiếng. Dưới đây là một số khác biệt chính trong ứng dụng này:

  • Nhiều mẫu xe hơi được liệt kê.
  • Có nhiều bộ đếm click chuột.
  • Nó chỉ hiển thị chiếc xe đã chọn.

Ngay bây giờ, sẽ đi vào chi tiết hơn về 3 thành phần tạo nên mô hình kiến trúc MVC nhé.

Model (dữ liệu)

Nhiệm vụ chính của thành phần này chỉ đơn giản là quản lý dữ liệu. Model sẽ chịu trách nhiệm quản lý dữ liệu từ cơ sở dữ liệu, API hay JSON. Trong ứng dụng Car Clicker, Model chứa các đối tượng (ô tô) với tất cả thông tin (dữ liệu) cần thiết cho ứng dụng.

Nó cũng quản lý chiếc xe hiện tại đang được hiển thị với biến ban đầu được đặt là

null

.


const model = { currentCar: null, cars: [ { clickCount: 0, name: 'Coupe Maserati', imgSrc: 'img/black-convertible-coupe.jpg', }, { clickCount: 0, name: 'Camaro SS 1LE', imgSrc: 'img/chevrolet-camaro.jpg', }, { clickCount: 0, name: 'Dodger Charger 1970', imgSrc: 'img/dodge-charger.jpg', }, { clickCount: 0, name: 'Ford Mustang 1966', imgSrc: 'img/ford-mustang.jpg', }, { clickCount: 0, name: '190 SL Roadster 1962', imgSrc: 'img/mercedes-benz.jpg', }, ], };

View (Giao diện người dùng)

Nhiệm vụ của View là quyết định xem người dùng sẽ nhìn thấy gì trên màn hình của họ?

Ứng dụng Car Clicker có hai chế độ xem:

carListView



CarView

. Cả hai chế độ xem đều có 2 chức năng quan trọng là xác định những gì mỗi chế độ xem muốn khởi tạo và hiển thị. Chức năng này sẽ quyết định câu hỏi là người dùng sẽ nhìn gì và như thế nào trên màn hình.

  • carListView


const carListView = { init() { // store the DOM element for easy access later this.carListElem = document.getElementById('car-list'); // render this view (update the DOM elements with the right values) this.render(); }, render() { let car; let elem; let i; // get the cars to be render from the controller const cars = controller.getCars(); // to make sure the list is empty before rendering this.carListElem.innerHTML = ''; // loop over the cars array for(let i = 0; i < cars.length; i++) { // this is the car we've currently looping over car = cars[i]; // make a new car list item and set its text elem = document.createElement('li'); elem.className = 'list-group-item d-flex justify-content-between lh-condensed'; elem.style.cursor = 'pointer'; elem.textContent = car.name; elem.addEventListener( 'click', (function(carCopy) { return function() { controller.setCurrentCar(carCopy); carView.render(); }; })(car) ); // finally, add the element to the list this.carListElem.appendChild(elem); } }, };

  • CarView


const carView = { init() { // store pointers to the DOM elements for easy access later this.carElem = document.getElementById('car'); this.carNameElem = document.getElementById('car-name'); this.carImageElem = document.getElementById('car-img'); this.countElem = document.getElementById('car-count'); this.elCount = document.getElementById('elCount'); // on click, increment the current car's counter this.carImageElem.addEventListener('click', this.handleClick); // render this view (update the DOM elements with the right values) this.render(); }, handleClick() { return controller.incrementCounter(); }, render() { // update the DOM elements with values from the current car const currentCar = controller.getCurrentCar(); this.countElem.textContent = currentCar.clickCount; this.carNameElem.textContent = currentCar.name; this.carImageElem.src = currentCar.imgSrc; this.carImageElem.style.cursor = 'pointer'; }, };

Controller

Chức năng của controller là lấy, sửa đổi và cung cấp dữ liệu cho người dùng. Về cơ bản, controller là liên kết giữa View và Model.

Thông qua các hàm getter và setter, controller lấy dữ liệu từ model và khởi tạo view. Nếu có bất kỳ cập nhật nào từ view, nó sẽ sửa đổi dữ liệu bằng hàm setter.


const controller = { init() { // set the current car to the first one in the list model.currentCar = model.cars[0]; // tell the views to initialize carListView.init(); carView.init(); }, getCurrentCar() { return model.currentCar; }, getCars() { return model.cars; }, // set the currently selected car to the object that's passed in setCurrentCar(car) { model.currentCar = car; }, // increment the counter for the currently-selected car incrementCounter() { model.currentCar.clickCount++; carView.render(); }, }; // Let's goooo! controller.init();

MVC là gì?

Model – View – Controller (MVC) là một mẫu thiết kế nhằm mục tiêu chia tách phần Giao diện và Code để dễ quản lý, phát triển và bảo trì. MVC chia ứng dụng phần mềm ra làm 3 phần có tương tác với nhau là Model(Dữ liệu), View(Giao diện), Controller( Code điều khiển tương tác giữa Model và View cũng như nghiệp vụ (Business)).

Hình 1 – Mô hình MVC

Trong đó:

  • Model là lớp chứa thông tin đối tượng (Dữ liệu), tương tác với Database. Chịu trách nhiệm chính trong mô hình hóa đối tượng.
  • View là giao diện của hệ thống tương tác trực tiếp với người dùng.
  • Controller nhận yêu cầu từ người dùng và sử dụng Model và View để xử lý và trả kết quả cho người dùng.

Vì sao cần có MVC?

Sự nhập nhằng giữa giao diện và code trong các ngôn ngữ lập trình Scripting như JSP, PHP, ASP làm cho code chương trình khó hiểu và khó bảo trì và khó hình dung trong quá trình cài đặt hệ thống từ góc nhìn thiết kế. Ví dụ: trong thiết kế chúng ta mô hình hóa lớp Account nhưng khi cài đặt lại phải có giao diện theo chức năng và một số qui định về Bussiness nên rất khó hình dung .MVC ra đời với mục tiêu khắc phục những vấn đề đó. Bạn sẽ thấy rõ hơn trong các phần tiếp theo khi chúng ta tiến hành áp dụng MVC để xây dựng ứng dụng.

MVC có thể dùng trên Desktop, tuy nhiên trên mô hình ứng dụng Web thì ưu điểm của nó mới được thể hiện rõ ràng hơn.

Học lập trình java web jsp servlet phần 1 - Tạo project jsp servlet theo mô hình MVC phần 1
Học lập trình java web jsp servlet phần 1 – Tạo project jsp servlet theo mô hình MVC phần 1

Keywords searched by users: mô hình mvc java

Cài Đặt Mô Hình Mvc (Model - View - Controller) Trong Java - Iviettech
Cài Đặt Mô Hình Mvc (Model – View – Controller) Trong Java – Iviettech
Mô Hình Mvc Trong Java Là Gì? Ví Dụ Cụ Thể Của Mô Hình Mvc
Mô Hình Mvc Trong Java Là Gì? Ví Dụ Cụ Thể Của Mô Hình Mvc
Mô Hình Mvc Là Gì? - Ví Dụ Login Sử Dụng Mô Hình Mvc Trong Java - Viettuts
Mô Hình Mvc Là Gì? – Ví Dụ Login Sử Dụng Mô Hình Mvc Trong Java – Viettuts
Hướng Dẫn Xây Dựng Mô Hình Mvc Trong Java - Gia Sư Tin Học
Hướng Dẫn Xây Dựng Mô Hình Mvc Trong Java – Gia Sư Tin Học
Mô Hình Mvc Là Gì? - Ưu Nhược Điểm Của Mvc - Học Java
Mô Hình Mvc Là Gì? – Ưu Nhược Điểm Của Mvc – Học Java
Mô Hình Mvc Trong Java Web Jsp/Servlet Là Gì? – Itphutran.Com
Mô Hình Mvc Trong Java Web Jsp/Servlet Là Gì? – Itphutran.Com
Ví Dụ Lập Trình Mvc Trong Java
Ví Dụ Lập Trình Mvc Trong Java
Cài Đặt Mô Hình Mvc (Model - View - Controller) Trong Java - Iviettech
Cài Đặt Mô Hình Mvc (Model – View – Controller) Trong Java – Iviettech
Tìm Hiểu Về Mô Hình Mvc Model 1&2 Và Code Demo Trong Java Web – Site Title
Tìm Hiểu Về Mô Hình Mvc Model 1&2 Và Code Demo Trong Java Web – Site Title
Cài Đặt Mô Hình Mvc (Model - View - Controller) Trong Java - Iviettech
Cài Đặt Mô Hình Mvc (Model – View – Controller) Trong Java – Iviettech
Mvc Là Gì? Ứng Dụng Của Mô Hình Mvc Trong Lập Trình
Mvc Là Gì? Ứng Dụng Của Mô Hình Mvc Trong Lập Trình
Code Learn
Code Learn
Mô Hình Mvc Là Gì? Mvc Design Pattern Là Gì?
Mô Hình Mvc Là Gì? Mvc Design Pattern Là Gì?
Cài Đặt Mô Hình Mvc (Model - View - Controller) Trong Java - Iviettech
Cài Đặt Mô Hình Mvc (Model – View – Controller) Trong Java – Iviettech
Code Learn
Code Learn
Mvc Là Gì? Ứng Dụng Của Mô Hình Mvc Trong Lập Trình 2024
Mvc Là Gì? Ứng Dụng Của Mô Hình Mvc Trong Lập Trình 2024
Spring Mvc - Phần 1: Kiến Trúc Của Spring Mvc, Flow Trong Spring Mvc
Spring Mvc – Phần 1: Kiến Trúc Của Spring Mvc, Flow Trong Spring Mvc
Mô Hình Mvc Là Gì Và Ứng Dụng Của Mvc Trong Lập Trình
Mô Hình Mvc Là Gì Và Ứng Dụng Của Mvc Trong Lập Trình
Mô Hình Mvc Là Gì? Những Ứng Dụng Và Ưu Điểm Của Mvc
Mô Hình Mvc Là Gì? Những Ứng Dụng Và Ưu Điểm Của Mvc
Mô Hình Mvc Là Gì? - Ví Dụ Login Sử Dụng Mô Hình Mvc Trong Java
Mô Hình Mvc Là Gì? – Ví Dụ Login Sử Dụng Mô Hình Mvc Trong Java
Tạo Java Web Project Mẫu Theo Mô Hình Mvc - Ngoc Khuong Blog
Tạo Java Web Project Mẫu Theo Mô Hình Mvc – Ngoc Khuong Blog
Mô Hình Mvc - Học Java
Mô Hình Mvc – Học Java
Luồng Đi Trong Spring Boot
Luồng Đi Trong Spring Boot
Mô Hình Mvc Là Gì? Những Ứng Dụng Và Ưu Điểm Của Mvc
Mô Hình Mvc Là Gì? Những Ứng Dụng Và Ưu Điểm Của Mvc
Giải Thích Dễ Hiểu Về Mvc – Mô Hình Mvc Là Gì?
Giải Thích Dễ Hiểu Về Mvc – Mô Hình Mvc Là Gì?
Tìm Hiểu Những Lợi Ích Mà Spring Mvc Mang Lại
Tìm Hiểu Những Lợi Ích Mà Spring Mvc Mang Lại
Tạo Ứng Dụng Theo Mô Hình Mvc Với Java/Jsp/Servlet – Itphutran.Com
Tạo Ứng Dụng Theo Mô Hình Mvc Với Java/Jsp/Servlet – Itphutran.Com
Java Swing – Mô Hình Mvc | Phở Code
Java Swing – Mô Hình Mvc | Phở Code
Java 81. Áp Dụng Mô Hình Mvc Trong Xây Dựng Chương Trình Và Cách Xử Lý Sự  Kiện - Youtube
Java 81. Áp Dụng Mô Hình Mvc Trong Xây Dựng Chương Trình Và Cách Xử Lý Sự Kiện – Youtube
Mô Hình Mvc Trong Java Là Gì? Ví Dụ Cụ Thể Của Mô Hình Mvc
Mô Hình Mvc Trong Java Là Gì? Ví Dụ Cụ Thể Của Mô Hình Mvc
Spring Mvc Một Số Kiến Thức Cơ Bản
Spring Mvc Một Số Kiến Thức Cơ Bản

See more here: kientrucannam.vn

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *