GP Coder

Trang chia sẻ kiến thức lập trình Java

  • Java Core
    • Basic Java
    • OOP
    • Exception Handling
    • Multi-Thread
    • Java I/O
    • Networking
    • Reflection
    • Collection
    • Java 8
  • Design pattern
    • Creational Pattern
    • Structuaral Pattern
    • Behavior Pattern
  • Web Service
    • SOAP
    • REST
  • JPA
  • Java library
    • Report
    • Json
    • Unit Test
  • Message Queue
    • ActiveMQ
    • RabbitMQ
  • All
Trang chủ Design pattern Hướng dẫn Java Design Pattern – MVC

Hướng dẫn Java Design Pattern – MVC

Đăng vào 19/02/2019 . Được đăng bởi GP Coder . 15921 Lượt xem . Toàn màn hình

Nội dung

  • 1 MVC Pattern là gì?
  • 2 Cài đặt MVC Pattern như thế nào?
  • 3 Lợi ích của MVC Pattern là gì?

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).

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.

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
5.0
15
Nếu bạn thấy hay thì hãy chia sẻ bài viết cho mọi người nhé! Và Donate tác giả

Shares

Chuyên mục: Design pattern Được gắn thẻ: Design pattern

Giới thiệu Google Guice – Aspect Oriented Programming (AOP)
Hướng dẫn Java Design Pattern – Transfer Object

Có thể bạn muốn xem:

  • Giới thiệu Aspect Oriented Programming (AOP) (09/02/2019)
  • Hướng dẫn Java Design Pattern – Template Method (07/01/2019)
  • Giới thiệu Design Patterns (30/08/2018)
  • Hướng dẫn Java Design Pattern – Observer (28/12/2018)
  • Hướng dẫn Java Design Pattern – Memento (25/12/2018)

Bình luận

bình luận

Tìm kiếm

Bài viết mới

  • Clean code 13/01/2024
  • Giới thiệu CloudAMQP – Một RabbitMQ server trên Cloud 02/10/2020
  • Kết nối RabbitMQ sử dụng Web STOMP Plugin 19/06/2020
  • Sử dụng publisher confirm trong RabbitMQ 16/06/2020
  • Sử dụng Dead Letter Exchange trong RabbitMQ 13/06/2020

Xem nhiều

  • Hướng dẫn Java Design Pattern – Factory Method (97715 lượt xem)
  • Hướng dẫn Java Design Pattern – Singleton (97398 lượt xem)
  • Giới thiệu Design Patterns (87287 lượt xem)
  • Lập trình đa luồng trong Java (Java Multi-threading) (85999 lượt xem)
  • Giới thiệu về Stream API trong Java 8 (83468 lượt xem)

Nội dung bài viết

  • 1 MVC Pattern là gì?
  • 2 Cài đặt MVC Pattern như thế nào?
  • 3 Lợi ích của MVC Pattern là gì?

Lưu trữ

Thẻ đánh dấu

Annotation Authentication Basic Java Behavior Pattern Collection Creational Design Pattern Cấu trúc điều khiển Database Dependency Injection Design pattern Eclipse Exception Executor Service Google Guice Gson Hibernate How to Interceptor IO Jackson Java 8 Java Core JDBC JDK Jersey JMS JPA json JUnit JWT Message Queue Mockito Multithreading OOP PowerMockito RabbitMQ Reflection Report REST SOAP Structuaral Pattern Swagger Thread Pool Unit Test Webservice

Liên kết

  • Clean Code
  • JavaTpoint
  • Refactoring Guru
  • Source Making
  • TutorialsPoint
  • W3Schools Online Web Tutorials

Giới thiệu

GP Coder là trang web cá nhân, được thành lập với mục đích lưu trữ, chia sẽ kiến thức đã học và làm việc của tôi. Các bài viết trên trang này chủ yếu về ngôn ngữ Java và các công nghệ có liên quan đến Java như: Spring, JSF, Web Services, Unit Test, Hibernate, SQL, ...
Hi vọng góp được chút ít công sức cho sự phát triển cộng đồng Coder Việt.

Donate tác giả

Tìm kiếm các bài viết của GP Coder với Google Search

Liên hệ

Các bạn có thể liên hệ với tôi thông qua:
  • Trang liên hệ
  • Linkedin: gpcoder
  • Email: contact@gpcoder.com
  • Skype: ptgiang56it

Follow me

Copyright 2025 © GP Coder · All Rights Reserved · Giới thiệu · Chính sách · Điều khoản · Liên hệ ·

Share

Blogger
Delicious
Digg
Email
Facebook
Facebook messenger
Flipboard
Google
Hacker News
Line
LinkedIn
Mastodon
Mix
Odnoklassniki
PDF
Pinterest
Pocket
Print
Reddit
Renren
Short link
SMS
Skype
Telegram
Tumblr
Twitter
VKontakte
wechat
Weibo
WhatsApp
X
Xing
Yahoo! Mail

Copy short link

Copy link