Cẩm nang NQDEV
HomeCheat SheetsContact
Công nghệ
Công nghệ
  • Introduction
  • Developer Roadmaps
    • Developer Roadmaps: Mô tả chi tiết
    • Roadmaps: ASP.NET Core Developer
    • Bảng phân loại cấp độ nhà phát triển .NET
    • ClearPath cho Team .NET Core
  • DotNET
    • ASP.NET Core
      • Hướng dẫn sử dụng tệp .http trong Visual Studio 2022 để thực hiện HTTP Requests
    • Message Queue
      • ZeroMQ
        • Xây dựng ZeroMQ Server trong dotNET 8 với CSharp
    • Playwright
      • Playwright: Tự Động Hóa Trình Duyệt Hiệu Quả
    • Optimize
      • Optimize - Một số cách tối ưu code và performance CSharp
    • Dev Blogs
      • Versions of .NET
        • Cập nhật từ .NET 9 lên .NET 10: Những thay đổi quan trọng
      • ASP.NET Core Web API với ASP.NET Core Web API (Native AOT): Bạn nên chọn loại nào?
      • Hướng dẫn xây dựng ứng dụng multi-tenant với .NET Core và MongoDB
      • Kiến Trúc Monolithic và Microservices: Lựa Chọn Phù Hợp Cho Dự Án Của Bạn
  • Design Patterns
    • CQRS Pattern
      • CQRS and MediatR trong .NET Core
    • Microservices
      • Ocelot
  • SQL Server
    • SQL Server Basics
    • SQL Server: DBCC
      • DBCC
      • DBCC SHOW_STATISTICS
      • DBCC SHRINKDATABASE
      • DBCC SHRINKFILE
      • DBCC SQLPERF
      • DBCC FREEPROCCACHE
    • SQL Server Replication
      • Giới thiệu SQL Server Replication
      • Hướng dẫn cấu hình và quản lý SQL Server Replication với Distribution Agent
    • SQL Server: Tập lệnh
      • SQL Server: Tập lệnh để tìm tất cả các giá trị Mặc định với Cột
    • Bảng tạm và sự linh hoạt trong xử lý dữ liệu lớn
    • Các bước để thay đổi nơi lưu trữ tệp log trong SQL Server
    • Các bước di chuyển tệp log trong SQL Server
    • Query Store trong SQL Server - Tổng Quan và Cách Quản Lý Hiệu Quả
    • SQL Server: Error Code
      • SQL Server Error : 14151, Severity: 18. Replication agent
  • Caching
    • Phân tích các phương pháp Caching dữ liệu trong .NET Core và .NET Framework
    • Redis
      • Redis mất dữ liệu khi restart
    • Varnish Cache
      • Hướng Dẫn Cài Đặt Varnish Cache với HAProxy Sử Dụng Docker Compose
  • NodeJS
    • NextJS
      • Hướng dẫn NextJS cho người mới bắt đầu
      • Parallel Routes trong Next.js
      • Hướng dẫn cấu hình Swagger trong NextJS
    • ReactJS
      • Hiểu về hook useRef của React như thế nào cho đúng
      • Tìm hiểu sâu hơn về useEffect từ A-Z
  • OS Linux
    • Tập lệnh Linux hay dùng
    • Centos 7
      • Hướng dẫn cài đặt và cấu hình Centos 7 dành cho người mới bắt đầu
      • Hướng Dẫn Kiểm Tra Các Cổng Đang Mở Trên Hệ Thống CentOS
      • Hướng Dẫn Sử Dụng zip Trên CentOS
      • Hướng dẫn cấu hình iptables để mở tất cả các cổng cho IP private
    • Windows
      • Hướng dẫn quản lý ứng dụng khởi động Windows bằng Registry Editor
  • VMware
    • Cách ảo hóa macOS Sierra trong VMWare Windows 10
    • Tự tin làm chủ mạng lưới: Cẩm nang tính toán địa chỉ IP từ A đến Z
  • Docker
    • Getting Started with Docker
    • Docker HUB
      • nqdev/nginx
  • Templates
    • Tabler Admin Template: Xây dựng Dashboard Quản trị đẹp mắt và dễ dàng
  • Open Source
    • shadcn-ui/ui
    • Kuma UI
    • Midone
  • Ứng dụng
    • Ansible
      • Ansible: Giới thiệu
      • Hướng dẫn chi tiết cài đặt Ansible
    • Apache JMeter
      • Features
        • Hướng dẫn chi tiết về Test Plan trong JMeter
        • Hướng dẫn chi tiết về Thread Group trong JMeter
    • DocFX
      • Những khái niệm cơ bản trong DocFX
      • DocFX - Hướng dẫn cài đặt, cấu hình sử dụng
      • DocFX - Hướng dẫn Markdown
      • DocFX - Hướng dẫn cấu hình file docfx.json
      • DocFX - Hướng dẫn sử dụng và tùy chỉnh Template
    • ETL Tools
      • Công cụ ETL Tools List & Software
      • Airbyte
        • Docker Compose
    • Elasticsearch
      • _reindex
        • Tìm hiểu sâu về API _reindex trong Elasticsearch
        • Hướng dẫn di chuyển dữ liệu trong Elasticsearch sử dụng API _reindex
      • _transform
    • HAProxy
      • HAProxy - Lập trình Lua và tích hợp Redis
    • Localtunnel
      • Hướng dẫn sử dụng Localtunnel để đưa ứng dụng Local lên Internet
    • LoopBack
      • Hướng dẫn cài đặt LoopBack 4 và khởi tạo dự án đầu tiên
    • N8N
      • Hướng dẫn cài đặt n8n bằng docker compose
    • NGINX Plus
      • NGINX: Hiệu suất vượt trội và giải pháp tối ưu cho hệ thống web
      • NGINX: Hướng dẫn chi tiết sử dụng GeoIP2 trên Alpine
      • NGINX: Hướng dẫn sử dụng Lua trên Alpine
      • NGINX: Hướng Dẫn Chi Tiết Cấu Hình Load Balancer
      • NGINX: Hướng Dẫn Sử Dụng Dynamic Modules
      • NGINX: Hướng dẫn Cài đặt và Sử dụng Module njs
      • Tích Hợp NGINX Làm API Gateway với Các Bước Xử Lý Phổ Biến
    • NTP - Secure Timeserver
      • Hướng dẫn cài đặt NTP an toàn với Docker Compose
    • Playwright
      • Playwright: Tự Động Hóa Trình Duyệt Hiệu Quả
    • Wordpress
      • Cách dùng Docker để phát triển ứng dụng Wordpress
  • Tin tức
    • DevSecOps là gì?
    • Giới thiệu bộ công cụ hỗ trợ lập trình từ SmallDev.tools và Code Beautify
    • Giới Thiệu và Hướng Dẫn Về DuckDB
    • Giới thiệu về Các Loại Cơ Sở Dữ Liệu
      • 1. HSQLDB (HyperSQL Database)
    • Hệ thống phân giải tên miền (DNS) và các loại bản ghi
    • Giải thích về Tiền Tố Path Nổi Tiếng – /.well-known
    • Giải mã Hệ thống tạo mã OTP của Google Authenticator
    • Quishing là gì? Hiểu và phòng tránh lừa đảo qua mã QR
  • Hướng dẫn
    • Hướng dẫn chi tiết tạo tài khoản Google bằng email công ty
    • Top 10 ASP .NET Open Source Projects GitHub 2024
    • Free Themes and Templates from Creative Tim
    • Hướng dẫn sử dụng Voler và Mazer Dashboard từ Zuramai
  • So Sánh
    • So Sánh Apache Parquet và CSV: Bảng So Sánh Chi Tiết, Ưu và Nhược Điểm
    • So Sánh Varnish Cache, Memcached và Redis: Ba Công Cụ Caching Phổ Biến trong Tối Ưu Hóa Hiệu Suất
  • Affiliate
    • Tuyển dụng
      • Bộ câu hỏi phỏng vấn T-SQL – Đánh giá ứng viên hiệu quả
    • eSMSvn: Chăm sóc khách hàng hiệu quả với SMS và ZNS
    • eSMS.vn: Giải pháp SMS Marketing hiệu quả cùng các chương trình ưu đãi hấp dẫn
Powered by GitBook
On this page
  • I. Định nghĩa
  • II. Design Patterns hỗ trợ developers như thế nào
  • III. Phân loại Design Patterns
  • Tài liệu tham khảo

Was this helpful?

Design Patterns

Design Pattern là một giải pháp chung để giải quyết các vấn đề phổ biến khi thiết kế phần mềm trong lập trình hướng đối tượng OOP.

I. Định nghĩa

  • Design pattern là các giải pháp tổng thể đã được tối ưu hóa, được tái sử dụng cho các vấn đề phổ biến trong thiết kế phần mềm mà chúng ta thường gặp phải hàng ngày.

  • Design patterns là một kỹ thuật trong lập trình hướng đối tượng, không phải là ngôn ngữ cụ thể nào cả, nó là một kĩ thuật lập trình. Nó có thể thực hiện được ở phần lớn các ngôn ngữ lập trình, chẳng hạn như Java, C#, thậm chí là Javascript hay bất kỳ ngôn ngữ lập trình nào khác Nó khá quan trọng và mọi lập trình viên muốn giỏi đều phải biết, nó cung cấp cho bạn các “mẫu thiết kế”, giải pháp để giải quyết các vấn đề chung, thường gặp trong lập trình. Các vấn đề mà bạn gặp phải có thể bạn sẽ tự nghĩ ra cách giải quyết nhưng có thể nó chưa phải là tối ưu.

  • Design Pattern giúp bạn giải quyết vấn đề một cách tối ưu nhất, cung cấp cho bạn các giải pháp trong lập trình OOP. Tuy nhiên, nếu bạn là “newbie” – người mới tìm hiểu về lập trình, chưa nắm rõ kiến thức về OOP thì giờ chưa phải lúc các bạn chơi với Design Pattern. Muốn học Design Pattern, bạn cần phải có kiến thức vững chắc về lập trình, đặc biệt là lập trình OOP. Hiểu và áp dụng được kiến thức về OOP sẽ giúp bạn tiếp cận và nâng cao trình độ với Design Pattern dễ dàng và hiệu quả hơn

II. Design Patterns hỗ trợ developers như thế nào

1. Tăng tốc độ phát triển phần mềm

Trong quá trình phát triển ứng dụng, việc sử dụng design patterns cho phép các developers có một công cụ để giải quyết các vấn đề thông dụng trong thiết kế phần mềm. Kể cả khi không gặp phải những vấn đề đó, việc nắm vững design patterns cũng rất hữu ích khi nó giúp developers thấy được cách giải quyết vấn đề thông qua việc ứng dụng các nguyên tắc thiết kế hướng đối tượng.

2. Code tường minh, dễ dàng team work

Bên cạnh đó, design patterns định nghĩa một ngôn ngữ chung mà developers có thể dùng để giao tiếp hiệu quả hơn. Chẳng hạn, chỉ cần nêu tên một pattern, tất cả những đồng đội trong nhóm đều sẽ hình dung được cấu trúc, ý tưởng đằng sau đó và cách ứng dụng nó. Tối ưu thời gian phát triển ý tưởng hơn vì hạn chế được thời gian giải thích.

3. Tái sử dụng code

Về phía dự án phần mềm, design patterns giúp developers có thể dễ dàng tái sử dụng và mở rộng code với các giải pháp tối ưu đã được kiểm chứng để giải quyết những vấn đề thông thường trong phát triển phần mềm. Do đó, khi gặp vấn đề trong xây dựng phần mềm, developers có thể coi design patterns như là kim chỉ nam để giúp mình giải quyết những vấn đề thay vì tự đi tìm kiếm giải pháp (mà có thể chưa có sự kiểm chứng kĩ càng).

4. Hạn chế lỗi tiềm ẩn, dễ dàng nâng cấp

Ngoài ra, việc sử dụng lại các design patterns còn giúp developers tránh các vấn đề tiềm ẩn có thể sẽ gây ra những lỗi lớn trong tương lai, cùng với đó, điều đó cũng giúp dự án dễ nâng cấp và bảo trì trong tương lai hơn.

III. Phân loại Design Patterns

Hệ thống các mẫu design pattern hiện nay rất nhiều, nhưng thường tóm gọn bằng 23 mẫu được định nghĩa trong cuốn “Design patterns Elements of Reusable Object Oriented Software”. Hệ thống các mẫu design pattern được chia thành 3 nhóm, được phân loại theo mục đích sử dụng:

  • Nhóm Creational

  • Nhóm Structural

  • Nhóm Behavioral

Dưới đây là link chi tiết từng mẫu về định nghĩa, kiến trúc, code minh họa... để các bạn tham khảo

1. Creational Pattern (Nhóm khởi tạo)

Nhóm Creational Pattern gồm 5 mẫu:

Các patterns loại này cung cấp giải pháp để tạo ra các đối tượng và che giấu được logic của việc tạo ra nó thay vì tạo ra đối tượng theo cách trực tiếp (sử dụng từ khoá new). Điều này giúp chương trình trở nên mềm dẻo hơn trong việc quyết định đối tượng nào cần được tạo ra trong những tình huống khác nhau.

2. Structural Pattern (Nhóm cấu trúc)

Nhóm Structural Pattern gồm 7 mẫu:

Những patterns loại này liên quan tới class và các thành phần của đối tượng. Nó dùng để thiết lập, định nghĩa quan hệ giữa các đối tượng. Hệ thống càng lớn thì mẫu này càng đóng vai trò quan trọng. Ta có thể dựa vào class diagram để theo dõi mẫu này.

3. Behavioral Pattern (Nhóm hành vi)

Nhóm Behavioral Pattern gồm 11 mẫu:

Nhóm này liên quan đến các quan hệ hành vi để xử lí các chức năng giữa các đối tượng trong hệ thống. Đối với các mẫu thuộc nhóm này ta có thể dựa vào collaboration và sequence diagram để theo dõi.

Để hiểu rõ hơn về từng mẫu Desgin Pattern, các bạn hãy theo dõi series bài viết này của mình nhé!!

Tài liệu tham khảo

[2] Design Patterns for Dummies, Steve Holzner, PhD

[3] Head First, Eric Freeman

[4] Gang of Four Design Patterns 4.0

[5] Dive into Design Pattern

PreviousKiến Trúc Monolithic và Microservices: Lựa Chọn Phù Hợp Cho Dự Án Của BạnNextCQRS Pattern

Last updated 7 months ago

Was this helpful?

[1] Refactoring.Guru.

[6] Design Patterns là gì? Tại sao nó lại là trợ thủ đắc lực của Developers - Tổng hợp 23 mẫu Design Pattern.

Singleton
Factory Method
Abstract Factory
Builder
Prototype
Adapter
Bridge
Composite
Decorator
Facade
Flyweight
Proxy
Iterpreter
Template Method
Chain of Responsibility
Command
Iterator
Mediator
Memento
Observer
State
Strategy
Visitor
https://refactoring.guru/design-patterns
https://viblo.asia/p/design-patterns-la-gi-tai-sao-no-lai-la-tro-thu-dac-luc-cua-developers-tong-hop-23-mau-design-pattern-GrLZDBQV5k0