2009-01-05 30 views
6

Tôi đang trình bày các nguyên tắc thiết kế SOLID và tôi đang cố gắng kết nối Nguyên tắc chịu trách nhiệm duy nhất và nguyên tắc Open-Closed để thiết kế mẫu.Các mẫu để thực hiện các nguyên tắc SOLID

Hiện nay tôi có

  • SRP: proxy, mặt tiền
  • OCP: chiến lược, chỉ huy

Có bất kỳ mô hình cơ bản khác tôi nên bao gồm?

+2

Xem http://stackoverflow.com/questions/382623/what-are-your-3-most-important-programming-patterns-and-why, http://stackoverflow.com/questions/293236/monkey- patch-vs-solid-guidelines –

+0

:% s/principal/nguyên tắc/g –

+0

Nếu bạn có bất kỳ cuốn sách nào trong số các cuốn sách Martin xung quanh, chúng sẽ là nơi tốt nhất để xem –

Trả lời

21

Nguyên tắc SOLID là các thuộc tính của ngôn ngữ và khuôn khổ OO tốt hơn bất kỳ thứ gì khác. Họ không dễ dàng dịch thành các mẫu thiết kế. Thay vào đó, chúng ảnh hưởng tốt so với xấu trong một mẫu thiết kế.

Nói chung, tất cả nguyên tắc SOLID hiển thị trong từng mẫu thiết kế ở đâu đó. Nếu tất cả các nguyên tắc SOLID không hiển thị, bạn có một cách để cải thiện trên mẫu thiết kế.

Trách nhiệm duy nhất thực sự là đóng gói cộng với một số khía cạnh của sự thừa kế và đa hình. Trách nhiệm duy nhất là nhiều nguyên tắc cơ bản hoặc nguyên lý cơ bản về cách phân tích một vấn đề thành các đối tượng hợp tác và xác định các lớp của các đối tượng đó. Tất cả các mẫu thiết kế nên minh họa điều này.

Tương tự, Mở/Đóng là một tính năng ngôn ngữ, thường được triển khai thông qua kế thừa. Nhưng nó có thể được thực hiện thông qua monkeypatching. Tất cả các mẫu thiết kế nên minh họa điều này.

Thay thế Liskov, cũng thường là một tính năng ngôn ngữ. Chúng tôi thường thực hiện điều này với các lớp đa hình được thiết kế tốt. Một số người cho rằng việc gõ vịt phá vỡ nguyên tắc này, người khác nói rằng việc gõ vịt biểu hiện nó. Có rất nhiều mẫu thiết kế dựa trên thay thế Liskov. Bất cứ điều gì với đa hình sẽ trưng bày Liskov thay thế.

Phân đoạn giao diện có thể là tính năng ngôn ngữ. Java có nó. Python - bởi hầu hết các tài khoản - không làm điều này. Tuy nhiên, bạn sẽ lưu ý rằng nhiều dự án Python cố gắng chính thức hóa các định nghĩa giao diện của chúng với các lớp bậc trên và các phép thử đơn vị.

Nghịch đảo phụ thuộc (phụ thuộc vào trừu tượng hóa) thường là một tính năng ngôn ngữ. Không có nhiều mẫu thiết kế nhấn mạnh vào điều này. Tuy nhiên, nhiều người trong chúng ta thích sử dụng các trừu tượng trong thư viện Bộ sưu tập Java để chúng ta có thể sử dụng thay thế Liskov trong các lớp cụ thể.

0

Tôi đã thực hiện cùng một bản trình bày và tôi đã chọn một số mẫu thiết kế để cho biết cách áp dụng các nguyên tắc.

Tôi lưu ý rằng đối với LSP, tất cả trừ hai mẫu thiết kế từ GOF được sử dụng thay thế.

Các vấn đề liên quan