All Projects → Ren0503 → design-pattern

Ren0503 / design-pattern

Licence: other
Design patterns

Projects that are alternatives of or similar to design-pattern

2D CARFIVE
2D Cartesian Quadtree Adaptive Mesh Refinement (AMR) for multiphase Five Equations Model
Stars: ✭ 23 (-88.5%)
Mutual labels:  design-patterns
notes
My personal tutorials and notes.
Stars: ✭ 34 (-83%)
Mutual labels:  design-patterns
swe
Examples and exercises used during Software Engineering course
Stars: ✭ 18 (-91%)
Mutual labels:  design-patterns
Java-Programs
Java Practiced Problems including concepts of OOPS, Interface, String , Collection.
Stars: ✭ 51 (-74.5%)
Mutual labels:  design-patterns
design-patterns-cpp14
🙏 Design patterns implemented in C++14
Stars: ✭ 35 (-82.5%)
Mutual labels:  design-patterns
design-patterns
Grokking design patterns in python
Stars: ✭ 24 (-88%)
Mutual labels:  design-patterns
Nodejs-Design-Pattern
Resumen de patrones de diseño extraídos de mi lectura del libro "Node.js Design Patterns de Mario Casciaro 1ra edición"
Stars: ✭ 45 (-77.5%)
Mutual labels:  design-patterns
jw-design-library
A library of product design patterns comprised of code, usage and guidelines.
Stars: ✭ 16 (-92%)
Mutual labels:  design-patterns
Design-Patterns-In-Swift-CN
设计模式(Swift 5.0 实现)- 中文版
Stars: ✭ 290 (+45%)
Mutual labels:  design-patterns
betterdocs
📚 Web version of https://github.com/khusnetdinov/ruby.fundamental repo - Fundamental programming with ruby examples and references. It covers threads, SOLID principles, design patterns, data structures, algorithms. Books for reading.
Stars: ✭ 25 (-87.5%)
Mutual labels:  design-patterns
refactoringtopatterns
A place to practice Refactoring To Patterns that Kerievsky wrote about in his book
Stars: ✭ 46 (-77%)
Mutual labels:  design-patterns
express-mvc-pattern
Example nodejs using express implementation design pattern using mvc architecture.
Stars: ✭ 52 (-74%)
Mutual labels:  design-patterns
goodcode
A curated collection of annotated code examples from prominent open-source projects
Stars: ✭ 184 (-8%)
Mutual labels:  design-patterns
fight-game
战斗小游戏-Java实现-设计模式
Stars: ✭ 26 (-87%)
Mutual labels:  design-patterns
HeadFirstDesignPatternsSwift
An implementation of examples from "Head First Design Patterns", written in Swift.
Stars: ✭ 20 (-90%)
Mutual labels:  design-patterns
eShopOnWeb
Sample ASP.NET Core 6.0 reference application, powered by Microsoft, demonstrating a layered application architecture with monolithic deployment model. Download the eBook PDF from docs folder.
Stars: ✭ 8,250 (+4025%)
Mutual labels:  design-patterns
uml-diagram-for-kotlin-design-pattern-examples
UML diagram list of GoF design pattern examples written in Kotlin.
Stars: ✭ 23 (-88.5%)
Mutual labels:  design-patterns
laravel-decorator
Easily decorate your method calls with laravel-decorator package
Stars: ✭ 125 (-37.5%)
Mutual labels:  design-patterns
JavaScript-design-patterns
Examples of popular design patterns in JavaScript
Stars: ✭ 41 (-79.5%)
Mutual labels:  design-patterns
Java-design-patterns
Java Design patterns.
Stars: ✭ 49 (-75.5%)
Mutual labels:  design-patterns

DESIGN PATTERN LÀ GÌ ?

design-pattern

Design Pattern là một giải pháp tổng thể cho các vấn đề chung trong thiết kế phần mềm. Nó cũng tương tự các bản thiết kế cho xây dựng nhà cửa, chúng được dùng để giải quyết các vấn đề lặp đi lặp lại trong thiết kế của bạn.

Các design pattern không thể copy rồi paste như cách bạn làm với các function có sẵn hay thư viện, vì chúng không phải là những đoạn code cụ thể. Design pattern ở đây là những khái niệm tổng quát để giải quyết các vấn đề riêng biệt. Bạn có thể tìm hiểu các design pattern và triển khai chúng lên ứng dụng của bạn. Các pattern thường bị nhầm lẫn với thuật toán, vì chúng đều là những khái niệm mô tả giải pháp cho một vấn đề nào đó.

Trong khi thuật toán là định nghĩa những hành động cụ thể để giải quyết vấn đề thì design pattern lại là một mô tả cao hơn cho các giải pháp. Code cho cùng một pattern có thể được triển khai trên hai ứng dụng khác nhau.

Tài liệu design pattern bao gồm những gì ?

Hầu hết các tài liệu mô tả rất chính thống, để cho mọi người có thể tái sử dụng cho nhiều trường hợp. Dưới đây là các thành phần thường có trong các document mô tả pattern:

  • Invention: mục đích pattern, mô tả ngắn gọn cả vấn đề và giải pháp.
  • Motivation: giải thích thêm vấn đề và giải pháp mà mô hình khả thi.
  • Structure: cấu trúc của các lớp cho thấy từng phần của pattern và chúng có liên quan như thế nào.
  • Example: ví dụ bằng một trong những ngôn ngữ lập trình phổ biến giúp bạn dễ dàng nắm bắt ý tưởng đằng sau pattern.

Tại sao nên học design pattern

Sự thật là các lập trình viên có thể xoay xở làm việc trong nhiều năm mà không cần biết đến bất kỳ pattern nào. Rất nhiều người làm như vậy. Tuy nhiên, ngay cả trong trường hợp đó, bạn có thể đang triển khai một số pattern mà không hề hay biết. Vậy tại sao bạn lại dành thời gian tìm hiểu chúng?

  • Giúp sản phẩm của chúng ta linh hoạt, dễ dàng thay đổi và bảo trì hơn.
  • Có một điều luôn xảy ra trong phát triển phần mềm, đó là sự thay đổi về yêu cầu. Lúc này hệ thống phình to, các tính năng mới được thêm vào trong khi performance cần được tối ưu hơn.
  • Design pattern cung cấp những giải pháp đã được tối ưu hóa, đã được kiểm chứng để giải quyết các vấn đề trong software engineering. Các giải pháp ở dạng tổng quát, giúp tăng tốc độ phát triển phần mềm bằng cách đưa ra các mô hình test, mô hình phát triển đã qua kiểm nghiệm.
  • Những khi bạn gặp bất kỳ khó khăn đối với những vấn đề đã được giải quyết rồi, design patterns là hướng đi giúp bạn giải quyết vấn đề thay vì tự tìm kiếm giải pháp tốn kém thời gian.
  • Giúp cho các lập trình viên có thể hiểu code của người khác một cách nhanh chóng (có thể hiểu là các mối quan hệ giữa các module chẳng hạn). Mọi thành viên trong team có thể dễ dàng trao đổi với nhau để cùng xây dựng dự án mà không tốn nhiều thời gian.

Khi nào nên sử dụng design pattern

Việc sử dụng các design pattern sẽ giúp chúng ta giảm được thời gian và công sức suy nghĩ ra các cách giải quyết cho những vấn đề đã có lời giải. Lợi ích của việc sử dụng các mô hình Design Pattern vào phần mềm đó chính là giúp chương trình chạy uyển chuyển hơn, dễ dàng quản lý tiến trình hoạt động, dễ nâng cấp bảo trì, …

Tuy nhiên điểm bất cập của design pattern là nó luôn là một lĩnh vực khá khó nhằn và hơi trừu tượng. Khi bạn viết code mới từ đầu, khá dễ dàng để nhận ra sự cần thiết phải có design pattern. Tuy nhiên, việc áp dụng design pattern cho code cũ thì khó khăn hơn.

Khi sử dụng những design pattern có sẵn thì chúng ta sẽ đối mặt với một vấn đề nữa là perfomance của product (code sẽ chạy chậm chẳng hạn). Cần phải chắc chắn là bạn đã hiểu toàn bộ mã nguồn làm việc như thế nào trước khi đụng vào nó. Việc này có thể là dễ dàng hoặc là đau đầu, phụ thuộc vào độ phức tạp của code.

Hiện nay chúng ta đang áp dụng rất nhiều design pattern vào công việc lập trình của mình. Nếu bạn thường tải và cài đặt các thư viện, packages hoặc module nào đó thì đó là lúc bạn thực thi một design pattern vào hệ thống.

Tất cả các framework cho ứng dụng web như Laravel, Codeigniter… đều có sử dụng những kiến trúc design pattern có sẵn và mỗi framework sẽ có những kiểu design pattern riêng.

Phân loại design pattern

Hệ thống các design pattern được chia thành 3 nhóm: nhóm Creational, nhóm Structural và nhóm Behavioral.

Code Example

Code ví dụ của RefactoringGuru

Ngôn ngữ Source Code
csharp C# https://github.com/RefactoringGuru/design-patterns-csharp
cpp C++ https://github.com/RefactoringGuru/design-patterns-cpp
go GO https://github.com/RefactoringGuru/design-patterns-go
java JAVA https://github.com/RefactoringGuru/design-patterns-java
php PHP https://github.com/RefactoringGuru/design-patterns-php
python PYTHON https://github.com/RefactoringGuru/design-patterns-python
ruby RUBY https://github.com/RefactoringGuru/design-patterns-ruby
swift SWIFT https://github.com/RefactoringGuru/design-patterns-swift
typescript TYPESCRIPT https://github.com/RefactoringGuru/design-patterns-typescript

Nguồn

Sách

book

Tác giả: Refactoring.Guru

author

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].