Mẫu thiết kế phần mềm

Trong công nghệ phần mềm, một mẫu thiết kế (tiếng Anh: 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. Một mẫu thiết kế không phải là một thiết kế hoàn thiện để mà có thể được chuyển đổi trực tiếp thành mã; nó chỉ là một mô tả hay là sườn (template) mô tả cách giải quyết một vấn đề mà có thể được dùng trong nhiều tình huống khác nhau. Các mẫu thiết kế hướng đối tượng thường cho thấy mối quan hệ và sự tương tác giữa các lớp hay các đối tượng, mà không cần chỉ rõ các lớp hay đối tượng của từng ứng dụng cụ thể. Các giải thuật không được xem là các mẫu thiết kế, vì chúng giải quyết các vấn đề về tính toán hơn là các vấn đề về thiết kế.

Lịch sử

Các mẫu xuất phát từ một ý niệm kiến trúc đưa ra bởi Christopher Alexander. Vào năm 1987, Kent Beck và Ward Cunningham bắt đầu thử nghiệm ý tưởng áp dụng các mẫu vào lập trình và đưa ra các kết quả của chúng tại hội thảo OOPSLA vào năm đó. Vào các năm tiếp theo, Beck, Cunningham và những người khác vẫn tiếp tục với công việc này.

Các mẫu thiết kế đã trở nên phổ biến trong khoa học máy tính sau khi cuốn sách Design Patterns: Elements of Reusable Object-Oriented Software được ấn hành vào năm 1994 bởi các tác giả được biết đến với tên "Gang of Four"(Gamma et al) gọi tắt là "GoF". Vào cùng năm đó, cuộc hội thảo đầu tiên về Các ngôn ngữ mẫu cho các chương trình đã được tổ chức và vào năm sau, Kho dự trữ các mẫu Portland (Portland Pattern Repository) đã được thiết lập để lưu trữ văn bản về các mẫu thiết kế.

Cách sử dụng

Các mẫu thiết kế có thể giúp tăng tốc quá trình phát triển phần mềm bằng cách cung cấp các mẫu hình (paradigms) phát triển đã được chứng thực và kiểm chứng. Để thiết kế phần mềm hiệu quả đòi hỏi phải xem xét các yếu tố mà chỉ trở nên rõ ràng sau khi hiện thực. Xác định được chúng, thông qua các mẫu thiết kế, chúng ta sẽ thoát khỏi chúng vì chúng có thể dẫn đến những rắc rối lớn và cải tiến khả năng dễ đọc của mã cho người viết mã và các nhà kiến trúc sẽ cảm thấy quen thuộc với các mẫu.

Thông thường, mọi người chỉ biết cách áp dụng một số kĩ thuật thiết kế phần mềm nào đó vào một vài vấn đề cụ thể nào đó. Những kĩ thuật này khó áp dụng mở rộng cho các vấn đề khác. Các mẫu thiết kế cung cấp các giải pháp chung, được viết tài liệu dưới một định dạng mà không gắn liền với một vấn đề cụ thể nào cả.

Các mẫu cho phép các nhà phát triển giao tiếp với nhau dùng các tên dễ hiểu, được dùng rộng rãi để đặt cho các tương tác của phần mềm. Các mẫu thiết kế chung có thể được cải tiến qua thời gian, để trở nên ổn định hơn là thiết kế tùy biến (ad-hoc designs).

Phân loại

Các mẫu thiết kế có thể được phân loại dựa vào nhiều tiêu chí, chung nhất là dựa vào vấn đề cơ bản mà chúng giải quyết. Theo tiêu chuẩn này, các mẫu thiết kế có thể được phân loại thành nhiều lớp, một số trong chúng là:

  • Mẫu cơ sở (Fundamental pattern)
  • Các mẫu tạo lập (Creational pattern)
  • Các mẫu cấu trúc (Structural pattern)
  • Các mẫu hành vi (Behavioral pattern)
  • Các mẫu đồng thời (Concurrency pattern)
  • Các mẫu xử lý sự kiện (Event handling pattern)
  • Các mẫu kiến trúc (Architectural pattern)

Viết tài liệu

Việc viết tài liệu cho một mẫu thiết kế nên chứa đựng đủ thông tin về vấn đề mà mẫu đề cập, ngữ cảnh trong đó nó được sử dụng và giải pháp được đề nghị. Tuy vậy, các tác giả mẫu thường sử dụng các dạng trình bày mẫu riêng của mình để trình bày các mẫu thiết kế, và các dạng trình bày mẫu thường tương tự với các phần cần thiết đã nêu. Các tác giả thường bao gồm thêm một số đoạn để cung cấp nhiều thông tin hơn và tổ chức các phần cần thiết trong những đoạn khác nhau có thể có với những tên khác nhau. Một dạng chung thường được sử dụng là dạng được sử dụng bởi "Bộ tứ" (Các tác giả của Mẫu Thiết Kế). Nó bao gồm các đoạn:

  • Tên mẫu và sự phân loại: Mỗi mẫu nên có một tên mô tả và là duy nhất để danh định và tham khảo đến. Thêm vào đó, một mẫu nên được phân loại theo một cách đã được mô tả trước đó. Việc phân loại giúp việc định ra việc sử dụng mẫu.
  • Dự định: Đoạn này nên mô tả mục tiêu của mẫu và các lập luận cho việc sử dụng mẫu. Nó như phần vấn đề của mẫu.
  • Tên gọi khác: Một mẫu có thể có nhiều hơn một tên. Những tên này nên được viết trong đọan này.
  • Động cơ: Đoạn này cung cấp một kịch bản bao gồm một vấn đề và một ngữ cảnh trong đó mẫu có thể được sử dụng. Với mối quan hệ vấn đề và ngữ cảnh, đoạn này chỉ ra khi nào mẫu được sử dụng.
  • Có thể áp dụng: Đoạn này mô tả các tình huống trong đó mẫu có thể áp dụng. Nó biểu diễn phần ngữ cảnh của mẫu.
  • Cấu trúc: Một biểu diễn đồ thị của mẫu.Sơ đồ lớp và Sơ đồ tương tác có thể được sử dụng cho cho mục đích này.
  • Thành phần tham gia: Danh sách các lớp và đối tượng được sử dụng trong mẫu này và vai trò của chúng trong thiết kế.
  • Sự cộng tác: Mô tả cách các lớp và các đối tượng được sử dụng trong mẫu tương tác với các đối tượng khác.
  • Các kết quả: Đoạn này mô tả các kết quả, ảnh hưởng và các thỏa hiệp gây ra khi sử dụng mẫu.
  • Sự hiện thực: Đoạn này mô tả sự hiện thực mẫu và biểu diễn phần giải pháp của mẫu. Nó cung cấp các kỹ thuật được sử dụng trong việc hiện thực mẫu, và đề nghị các cách cho sự hiện thực này.
  • Mã mẫu: Một minh họa cách mẫu này được sử dụng trong một ngôn ngữ lập trình.
  • Các sử dụng được biết: Đoạn này bao gồm các ví dụ sử dụng thực sự của mẫu.
  • Các mẫu liên quan: Đoạn này bao gồm các mẫu khác có một số quan hệ với mẫu ví thế chúng có thể được sử dụng cùng với mẫu hoặc thay thế cho mẫu. Nó cũng bao gồm các sự khác nhau của mẫu với các mẫu tương tự khác.

Xem thêm

  • Anti-pattern
  • Khai thác mẫu (Pattern mining)
  • Pedagogical patterns
  • Portland Pattern Repository
  • Programming practice
  • Refactoring
  • Kỹ nghệ phần mềm và Danh sách các chủ đề kỹ nghệ phần mềm

Tham khảo

  • Alexander, Christopher (1977). A Pattern Language: Towns, Buildings, Construction. et al. New York: Oxford University Press.
  • Beck, K. (1996). Proceedings of the 18th International Conference on Software Engineering. R. Crocker, G. Meszaros, J.O. Coplien, L. Dominick, F. Paulisch, and J. Vlissides. tr. 25–30.
  • Beck, Kent, Ward Cunningham. Using Pattern Languages for Object-Oriented Programs. Presented at the Workshop on the Specification and Design for Object-Oriented Programming at OOPSLA '87.
  • Buschmann, Frank. Pattern-oriented Software Architecture, Volume 1: A System of Patterns. Regine Meunier, Hans Rohnert, Peter Sommerlad, and Michael Stal. John Wiley & Sons. ISBN 0-471-95869-7.
  • Cooper, James W. (1998). The Design Patterns Java Companion. Addison-Wesley.
  • Coplien, James O. Pattern Languages of Program Design. Douglas C. Schmidt. Addison-Wesley. ISBN 0-201-60734-4.
  • Coplien, James O. Pattern Languages of Program Design 2. John M. Vlissides, and Norman L. Kerth. Addison-Wesley. ISBN 0-201-89527-7.
  • Cunningham, Ward (ngày 16 tháng 5 năm 1988). “Using a pattern language for programming”. Addendum to the Proceedings of OOPSLA'87, volume 23,5 of ACM SIGPLAN Notices. Kent Beck.
  • den Burger, Mathijs (2002). Design Patterns for Networking Applications in Java.
  • Fowler, Martin (2003). Patterns of Enterprise Application Architecture. Addison-Wesley. ISBN 0-321-12742-0.
  • Fowler, Martin. Patterns [software patterns] Software, IEEE, Volume: 20, Issue: 2, March-April 2003. Pages: 56 – 57.
  • Freeman, Eric (2004). Head First Design Patterns. Elisabeth Freeman, Kathy Sierra, and Bert Bates. O'Reilly Media. tr. 637. ISBN 0-596-00712-4.
  • Gamma, Erich (1997). Design Patterns CD. Richard Helm, Ralph Johnson, and John Vlissides. ISBN 0-201-63498-8. Kiểm tra giá trị ngày tháng trong: |year= (trợ giúp)
  • Harrison, Neil. Pattern Languages of Program Design 4. Brian Foote, and Hans Rohnert. Addison-Wesley. ISBN 0-201-43304-4.
  • Kaplan, Jonathan. J2EE Design Patterns. William C. R. Crawford. O'Reilly. ISBN 0-596-00427-3.
  • Kircher, Michael. Pattern-oriented Software Architecture. Volume 3: Patterns for Resource Management. Prashant Jain. John Wiley & Sons. ISBN 0-470-84525-2.
  • Marinescu, Floyd (2002). EJB Design Patterns: Advanced Patterns, Processes and Idioms. John Wiley & Sons. ISBN 0-471-20831-0.
  • Martin, Robert Cecil. Pattern Languages of Program Design 3. Dirk Riehle, and Frank Buschmann. Addison-Wesley. ISBN 0-201-31011-2.
  • Schmidt, Douglas C. Pattern-oriented Software Architecture. Volume 2: Patterns for Concurrent and Networked Objects. Michael Stal, Hans Rohnert, and Frank Buschmann. John Wiley & Sons. ISBN 0-471-60695-2.
  • Schmidt, Douglas C. C++ Network Programming: Mastering Complexity Using ACE and Patterns. Stephen D. Huston. Addison-Wesley. ISBN 0-201-60464-7.
  • Shalloway, Alan (2005). Design Patterns Explained: A New Perspective on Object-Oriented Design. James R. Trott. Addison-Wesley. ISBN 0-201-71594-5.
  • Vlissides, John M. (1998). Pattern Hatching: Design Patterns Applied. Addison-Wesley. ISBN 0-201-43293-5.
  • “History of Patterns”. Portland Pattern Repository. ngày 28 tháng 7 năm 2005.

Liên kết ngoài

  • Java J2EE pattern catalog
  • Design Patterns in Java Lưu trữ 2005-12-06 tại Wayback Machine
  • Microsoft patterns & practices catalog
  • Patterns Catalog Lưu trữ 2004-04-02 tại Wayback Machine
  • The PatternShare community Lưu trữ 2006-12-05 tại Wayback Machine - community site for sharing patterns.
  • TechBookReport - reviews of books on design
  • Many design patterns are described in mgrand's book Lưu trữ 1998-12-05 tại Wayback Machine patterns and software methodologies
  • The list of design patterns is entirely based on a wiki page http://c2.com/cgi/wiki?CategoryPattern.
  • x
  • t
  • s
Các mẫu thiết kế phần mềm
Tạo lập
Cấu trúc
Hành vi
  • Bảng đen
  • Chain of responsibility
  • Mệnh lênh
  • Trình thông dịch
  • Biến lặp
  • Mediator
  • Vật lưu niệm
  • Null object
  • Quan sát viên
  • Nhân viên
  • Specification
  • State
  • Chiến lược
  • Template method
  • Khách thăm
Hàm
  • Monoid
  • Hàm tử
  • Applicative
  • Monad
  • Comonad
  • Free monad
  • HOF
  • Currying
  • Function composition
  • Closure
  • Generator
Đồng thời
  • Active object
  • Actor
  • Balking
  • Barrier
  • Binding properties
  • Coroutine
  • Compute kernel
  • Double-checked locking
  • Event-based asynchronous
  • Fiber
  • Futex
  • Futures and promises
  • Guarded suspension
  • Immutable object
  • Join
  • Khoá
  • Messaging
  • Monitor
  • Nuclear
  • Proactor
  • Reactor
  • Read write lock
  • Scheduler
  • STM
  • Thread pool
  • Thread-local storage
Kiến trúc
  • ADR
  • Active record
  • Broker
  • Client–server
  • CBD
  • DAO
  • DTO
  • DDD
  • ECB
  • ECS
  • EDA
  • Front controller
  • Identity map
  • Interceptor
  • Implicit invocation
  • Inversion of control
  • Model 2
  • MOM
  • Microservices
  • MVA
  • MVC
  • MVP
  • MVVM
  • Monolithic
  • Multitier
  • Naked objects
  • ORB
  • P2P
  • Publish–subscribe
  • PAC
  • REST
  • SOA
  • Service locator
  • Đặc tả
Đám mây
Phân tán
  • Ambassador
  • Anti-Corruption Layer
  • Bulkhead
  • Cache-Aside
  • Circuit Breaker
  • CQRS
  • Compensating Transaction
  • Competing Consumers
  • Compute Resource Consolidation
  • Event Sourcing
  • External Configuration Store
  • Federated Identity
  • Gatekeeper
  • Index Table
  • Leader Election
  • MapReduce
  • Materialized View
  • Pipes
  • Filters
  • Priority Queue
  • Publisher-Subscriber
  • Queue-Based Load Leveling
  • Retry
  • Scheduler Agent Supervisor
  • Sharding
  • Sidecar
  • Strangler
  • Throttling
  • Valet Key
Khác
  • Business delegate
  • Composite entity
  • Intercepting filter
  • Lazy loading
  • Mangler
  • Mock object
  • Type tunnel
  • Method chaining
Sách
Người
  • Christopher Alexander
  • Erich Gamma
  • Ralph Johnson
  • John Vlissides
  • Grady Booch
  • Kent Beck
  • Ward Cunningham
  • Martin Fowler
  • Robert Martin
  • Jim Coplien
  • Douglas Schmidt
  • Linda Rising
Cộng đồng
  • x
  • t
  • s
Những lĩnh vực chính của khoa học máy tính
Các nền tảng toán học
Lý thuyết phép tính
Độ phức tạp Kolmogorov · Lý thuyết Automat · Lý thuyết tính được · Lý thuyết độ phức tạp tính toán · Lý thuyết điện toán lượng tử
Các cấu trúc dữ liệu
các giải thuật
Phân tích giải thuật · Thiết kế giải thuật · Hình học tính toán · Tối ưu hóa tổ hợp
Các ngôn ngữ lập trình
Các trình biên dịch
Tính song hành,
Song song,
và các hệ thống phân tán
Công nghệ phần mềm
Phân tích yêu cầu · Thiết kế phần mềm · Các phương pháp hình thức · Kiểm thử phần mềm · Quy trình phát triển phần mềm · Các phép đo phần mềm · Đặc tả chương trình · LISP · Mẫu thiết kế · Tối ưu hóa phần mềm
Kiến trúc hệ thống
Kiến trúc máy tính · Tổ chức máy tính · Các hệ điều hành · Các cấu trúc điều khiển · Cấu trúc bộ nhớ lưu trữ · Vi mạch · Thiết kế ASIC · Vi lập trình · Vào/ra dữ liệu · VLSI design · Xử lý tín hiệu số
Viễn thông
Mạng máy tính
Các cơ sở dữ liệu
Các hệ thống thông tin
Hệ quản trị cơ sở dữ liệu · Cơ sở dữ liệu quan hệ · SQL · Các giao dịch · Các chỉ số cơ sở dữ liệu · Khai phá dữ liệu · Biểu diễn và giao diện thông tin · Các hệ thống thông tin · Khôi phục dữ liệu · Lưu trữ thông tin · Lý thuyết thông tin · Mã hóa dữ liệu · Nén dữ liệu · Thu thập thông tin
Trí tuệ nhân tạo
Lập luận tự động · Ngôn ngữ học tính toán · Thị giác máy tính · Tính toán tiến hóa · Các hệ chuyên gia  · Học máy · Xử lý ngôn ngữ tự nhiên · Robot học
Đồ họa máy tính
Trực quan hóa · Hoạt họa máy tính · Xử lý ảnh
Giao diện người-máy tính
Khả năng truy cập máy tính · Giao diện người dùng · Điện toán mang được · Điện toán khắp mọi nơi · Thực tế ảo
Khoa học tính toán
Cuộc sống nhân tạo · Tin sinh học · Khoa học nhận thức · Hóa học tính toán · Khoa học thần kinh tính toán · Vật Lý học tính toán · Các giải thuật số · Toán học kí hiệu
Chú ý: khoa học máy tính còn có thể được chia thành nhiều chủ đề hay nhiều lĩnh vực khác dựa theo Hệ thống xếp loại điện toán ACM.
  • x
  • t
  • s
Chuyên ngành chính của Tin học
Công nghệ thông tin
Hệ thống thông tin
Khoa học máy tính
Kỹ thuật máy tính
Kỹ nghệ phần mềm
Mạng máy tính
Tin học kinh tế
  • x
  • t
  • s
Giám đốc công nghệ thông tin · Tin học kinh tế · Quản lý công nghệ thông tin
Quản lý
Quản lý mạng
Quản trị hệ thống
Hoạt động vận hành
  • Bảo trì thiết bị
  • Bảo vệ hệ thống
  • Đối phó sự cố
  • Kế hoạch dự phòng
Hoạt động kỹ thuật
  • Hỗ trợ kỹ thuật
  • Kiểm soát truy cập
  • Kiểm tra hệ thống
  • Xác thực người dùng
Hoạt động an toàn
  • An ninh nhân sự
  • An ninh hệ thống
  • Nhận thức an toàn
  • Rủi ro hệ thống
Quản lý hệ thống
  • Bàn dịch vụ
  • Quản lý cấu hình
  • Quản lý công suất
  • Quản lý dịch vụ
  • Quản lý hạ tầng
  • Quản lý khôi phục
  • Quản lý người dùng
  • Quản lý sự cố
  • Quản lý tính liên tục
  • Quản lý tính sẵn sàng
  • Tổ chức công việc
  • Tổ chức hỗ trợ
Kỹ năng lãnh đạo
  • Kỹ năng cộng tác nhóm
  • Kỹ năng đàm phán
  • Kỹ năng giải quyết vấn đề
  • Kỹ năng giao tiếp
  • Kỹ năng gọi thoại
  • Kỹ năng huấn luyện
  • Kỹ năng lắng nghe
  • Kỹ năng phân công ủy thác
  • Kỹ năng phỏng vấn tuyển dụng
  • Kỹ năng quản lý thời gian
  • Kỹ năng tạo động lực
  • Kỹ năng tư duy
  • Kỹ năng thiết kế quy trình
  • Kỹ năng thuyết trình
  • Kỹ năng viết tài liệu kỹ thuật
Ứng dụng
Các lĩnh vực liên quan
Quản trị kinh doanh