Bạn nên giải thích các Mẫu thiết kế cho những người bên ngoài Thế giới phần mềm như thế nào


10

Tôi muốn giải thích các mẫu thiết kế cho cháu gái của tôi, nhưng luôn phải vật lộn để làm như vậy. Phần lớn là do tôi không hiểu rõ về các mẫu thiết kế. Làm thế nào để bạn đề xuất giải thích các mẫu như MVC, Singleton, Factory, Rep Storage, v.v ... bằng những thuật ngữ đơn giản đến mức ngay cả những đứa trẻ 10 tuổi cũng có thể hiểu được.

Tôi đang tìm kiếm các ví dụ có thể dễ dàng giúp hiểu các mẫu. Ví dụ với đồ chơi, phim ảnh, âm nhạc, vv


2
Các mẫu thiết kế là để phát triển phần mềm lý thuyết thể loại là gì đối với toán học. . . ít nhất đó là cách tôi giải thích nó cho một nhà toán học.
Eric Wilson

Nó giống như đọc phần trả lời của sách câu đố. Bạn sẽ không biết câu trả lời cho mọi câu đố, nhưng bạn sẽ biết hầu hết và bạn sẽ biết bắt đầu từ đâu cho câu đố mà bạn chưa thấy câu trả lời.
StuperUser

Câu trả lời:


7

Tôi nghĩ rằng phần đầu của bài viết Wikipedia có lẽ là một khởi đầu tốt:

A design pattern is a general reusable solution to a commonly occurring problem.

Hay bạn muốn giải thích chi tiết cụ thể của những mẫu cụ thể đó?


tìm kiếm chi tiết cụ thể
gizgok

1
Ngoài ra còn có wikipedia đơn giản, bảo mật.wik mega.org/wikipedia/simple/wiki/Design_potype
Jeff Welling

2
@gizgok: "chi tiết cụ thể"? Điều đó thật nực cười. Chỉ định - chi tiết - những gì bạn có thể muốn nhiều hơn nữa. Muốn "cụ thể" là mơ hồ.
S.Lott

5

Nó phụ thuộc vào lý do tại sao bạn muốn giải thích nó. Nếu bạn chỉ muốn giải thích ý tưởng về các mẫu, tôi sẽ rút ra các ví dụ từ kiến ​​trúc trong Ngôn ngữ mẫu. Các nhà nghiên cứu phát hiện ra rằng một số khía cạnh của một tòa nhà hoặc một căn phòng khiến mọi người thích sống hoặc làm việc trong tòa nhà hoặc căn phòng đó - trên khắp thế giới ở các nền văn hóa khác nhau, với các vật liệu xây dựng khác nhau và trong các loại khu phố khác nhau. Ví dụ như "Light on Two Sides". Các phòng có cửa sổ trên hai bức tường đẹp hơn nhiều so với những phòng chỉ có một (hoặc không có.) Cũng có những mẫu như thế trong phần mềm - thậm chí sử dụng các ngôn ngữ lập trình khác nhau, một số mẫu vẫn tái diễn. Và ngay cả trong phần mềm rất khác nhau - một trò chơi, một cái gì đó để tính toán tài chính, công cụ bên trong Facebook, v.v.

Sau đó, nếu bạn muốn nói về một mô hình cụ thể (không chắc tại sao, với một đứa trẻ mười tuổi), bạn có thể bắt đầu bằng cách đưa ra các ví dụ về nơi nó được sử dụng trước khi bạn cố gắng giải thích cách nó hoạt động. Vì vậy, Composite cho phép bạn tránh đệ quy rõ ràng khi bạn tìm ra trọng lượng của vali bằng cách cộng trọng lượng của container và tổng cộng tất cả các container và những thứ lỏng lẻo mà nó giữ, nhưng nó cũng hoạt động để tính gánh nặng lương trong một công ty hoặc năng lực trong một tổ hợp sản xuất. Nếu điều đó thậm chí là một chút thú vị với đứa trẻ mười tuổi, bạn có thể cố gắng giải thích cách nó hoạt động.


1
Vì vậy, 10 tuổi muốn trở thành hacker
gizgok

2

Các mẫu thiết kế tồn tại bởi vì một số người nhận ra rằng có nhiều cách để các phần mềm hoạt động tốt với nhau và muốn chia sẻ hiểu biết của họ.

Bạn có thể nghĩ về các mẫu thiết kế giống như cách bạn nghĩ về các nhóm người. Chẳng hạn, đôi khi chúng ta có một người tạo điều kiện cho tất cả các cuộc họp của chúng ta. Nó giống như một mẫu Trình điều khiển, tạo điều kiện cho sự tương tác giữa các đối tượng.

Hoặc tưởng tượng một khán giả, nơi ai đó ở phía trước phòng theo dõi những người đưa tay lên, sau đó lặp lại câu hỏi để mọi người khác có thể nghe, hoặc có thể phản ứng bằng cách trả lời nó. Điều đó sẽ tương tự như mẫu Chủ đề / Người quan sát.

Có những mẫu hoạt động như người dịch (mẫu Adaptor), như nhân viên bảo vệ (Proxy), như chuyên gia trong một lĩnh vực (Singletons) hoặc như những người kiểm tra xe của bạn đang hoạt động (Trình xác thực).

Sự khác biệt giữa các đối tượng và con người là chúng ta có thể tạo ra nhiều đối tượng như chúng ta muốn và có nhiều bản sao khác nhau của chúng. Điều đó rất quan trọng để hiểu những trách nhiệm mà các đối tượng nên có, giữ cho trách nhiệm của họ nhỏ và cố gắng không lặp lại những gì họ làm để phần mềm không trở nên quá phức tạp. Các chuyên gia có nhiều kinh nghiệm trong việc này và họ đã cho chúng tôi những mô hình về cách phần mềm hiệu quả tương tác để chúng tôi có thể quyết định loại vai trò nào là ẩn dụ tốt nhất cho công việc chúng tôi đang cố gắng và có được các phần mềm để cộng tác theo cách thích hợp nhất.


1

Nói với cô ấy rằng chúng được sử dụng để xây dựng các thành phần riêng lẻ của một hệ thống, giống như các kỹ thuật nấu ăn được sử dụng để xây dựng một bữa ăn / món ăn. Hãy tưởng tượng bạn đang làm bữa tối, với khoai tây, thịt và rau. Bạn quyết định bạn muốn khoai tây luộc và nghiền, thịt nướng và rau hấp. Bạn sử dụng mô hình thiết kế vỉ nướng của bạn để nấu thịt, luộc và nghiền các mẫu cho khoai tây và mô hình hơi nước cho rau.


1

Hầu hết các mẫu thiết kế này là một phần của thiết kế hướng đối tượng. Bạn thực sự không thể giải thích chúng cho một người không có hiểu biết về OOD. Bạn có thể mô tả mục tiêu mà bạn đạt được với mẫu đã cho, nhưng không phải là cách nó hoạt động cũng như tại sao bạn cần nó. Tất nhiên trừ khi bạn đi vào giải thích toàn bộ OOD.


1
Hầu hết các mẫu thiết kế là hướng dẫn về cách sử dụng trừu tượng thích hợp để giải quyết một vấn đề cụ thể. Không thực sự là một phần của thiết kế hướng đối tượng mỗi lần nói.
Pemdas

@Pemdas: lấy Nhà máy làm ví dụ. Nó có ý nghĩa gì ngoài OOP?
vartec

OOP là nơi các mẫu được nói đến nhiều nhất, nhưng các ngôn ngữ khác và có các bộ mẫu riêng. Ví dụ, Monads (thường được tìm thấy trong các ngôn ngữ Hàm, đôi khi có thể được thực hiện trong OOP) là một mẫu của chính chúng và cho phép các mẫu khác. Hơn nữa, như đã được đề cập ở đây, các mẫu thiết kế đã được lập trình từ Architecture.
Charlie

Các mẫu thiết kế không liên quan gì đến OOP. Các mẫu thiết kế là về các vấn đề xuất hiện nhiều lần và các chiến lược đã được phát triển để xử lý các vấn đề. Nếu một chiến lược được phát triển nhiều lần thì bạn có một mô hình. Nếu một chiến lược liên tục hoạt động thì bạn gọi nó là một mẫu thiết kế, nếu nó liên tục thất bại, bạn gọi nó là một mô hình chống. Học về các mẫu thiết kế có nghĩa là học các chiến lược đã hoạt động trong quá khứ nhiều lần. Xem làm thế nào tôi không đề cập đến lập trình, ít OOP hơn?
gnasher729

0

Các mẫu thiết kế được mô tả đầu tiên cho kiến ​​trúc. Những thứ như vị trí của quảng trường, các tòa nhà và các bố cục thường lặp đi lặp lại. Bạn có thể bắt đầu từ đó. Những thứ như lối vào chính đối diện với đường phố, cánh cửa hướng vào góc phòng và bất cứ điều gì khác bạn có thể nghĩ đến. Các mẫu của tác giả ban đầu không được sử dụng rộng rãi. Ông được báo cáo cho biết rằng bản thân các mẫu là không đủ.

Thảo luận về những thứ di chuyển xung quanh phòng. Đặt một cái ghế trước cửa. Nó sẽ có ý nghĩa để di chuyển các cửa sổ hoặc cửa ở nơi khác. Tại sao hay tại sao không?

Hãy thử một cái gì đó như đặt một vị trí trên bàn. Hãy thử sắp xếp mọi thứ theo kích thước đi từ bạn. Không phải mẫu bình thường và khó làm việc. Thiết lập nó bình thường. Đây là một bố trí phù hợp cho một ly nước trái cây nhanh chóng? Các mẫu không phải lúc nào cũng phù hợp.

Chúng tôi sống với các mẫu tất cả các thời gian. Lấy ba hoặc bốn cuốn sách và bắt đầu phân trang thông qua chúng. Có một mô hình rõ ràng trong bố trí; trang tiêu đề, mục lục, nội dung và chỉ mục. Không phải tất cả các thành phần được yêu cầu, nhưng sẽ rất khó hiểu khi nhìn thấy chúng không đúng chỗ.


0

Các mẫu thiết kế là để phát triển phần mềm những gì đồ gá là để chế biến gỗ. Đó là một công cụ mà bạn có thể tạo ra các 'vết cắt' nổi tiếng để sử dụng trong các dự án lớn hơn.

Lưu ý rằng bạn không cần jig để cắt, nó chỉ dễ dàng hơn trong một số trường hợp.


0

Tôi cảm thấy câu trả lời khác của tôi là viết tắt của trường hợp chung, nhưng OP nhận xét yêu cầu cụ thể (vì vậy tôi cảm thấy nó xứng đáng là một câu trả lời riêng biệt). Đáng buồn là tôi không quen thuộc với mẫu Kho lưu trữ, nhưng tôi sẽ đâm vào những người khác. Theo nguyên tắc, tôi nghĩ cách tốt nhất để giải thích những vấn đề này là thông qua vấn đề bạn muốn giải quyết, tại sao bạn muốn giải quyết nó và làm thế nào vấn đề hoàn thành nó.

Người độc thân

Mẫu này được sử dụng khi chúng tôi muốn đảm bảo rằng chỉ có một thứ gì đó. Mô hình được thực hiện bằng cách ngăn người khác tạo đối tượng của chúng tôi.

Wikipedia

MVC

Mẫu này được sử dụng để giúp giữ mọi thứ theo mô-đun với tất cả các lợi ích đi kèm với đó. Chế độ xem là "giao diện người dùng", Mô hình là dữ liệu (bao gồm logic nghiệp vụ) và Bộ điều khiển là cách người dùng thao tác mô hình. Với tính mô-đun này, không có gì ngăn tôi có nhiều khung nhìn / bộ điều khiển để làm việc với cùng một mô hình. Đối với một ví dụ đơn giản hóa quá mức, tôi có thể tương tác với email ("kiểu máy") của mình thông qua một trang web, ứng dụng máy tính để bàn và iPhone của tôi ("lượt xem + bộ điều khiển"). Nếu tôi có hộp thư nhóm dùng chung, tôi có thể tạo bộ điều khiển không gửi email và sử dụng lại cùng chế độ xem ứng dụng và email. (vâng, quá đơn giản, nhưng hy vọng có thể hiểu được :))

Ngoài ra, với các mối quan tâm được xác định rõ ràng này, các thay đổi trong một (lý tưởng) không yêu cầu thay đổi trong một mối quan tâm khác. Ví dụ cụ thể, nếu tôi cần hỗ trợ đọc / ghi vào cơ sở dữ liệu MySQL thay vì cơ sở dữ liệu Oracle, tôi chỉ cần thay đổi mô hình của mình và chế độ xem / điều khiển của tôi không thay đổi.

Wikipedia

Nhà máy

Phải cẩn thận ở đây vì có nhiều mẫu tương tự được gọi là Factory ... Tôi sẽ nói về Tóm tắt Factory , nhưng bạn cũng nên biết đó cũng là một mẫu Phương thức Factory .

Về cơ bản, tôi sẽ sử dụng một Nhà máy Trừu tượng khi tôi biết những bước tôi muốn thực hiện, nhưng các bước về cách thực hiện các bước riêng lẻ này có thể khác nhau. Ví dụ, tôi có thể đang xây dựng một ứng dụng mà tôi cần tạo một hộp thoại với một nút trên đó. Bằng cách mã của tôi sử dụng một nhà máy UI giả định, nếu tôi cần mã của mình trên Mac hoặc Linux thay vì Windows, tôi chỉ cung cấp một nhà máy khác và phần còn lại của mã không thay đổi. Đối với một ví dụ có khả năng lớn hơn, tôi có thể có Web Factory và đột nhiên hầu hết các mã ủng hộ ứng dụng máy tính để bàn của tôi hiện cũng cung cấp năng lượng cho một trang web phong phú :) (ok không thực tế vì lý do khác, nhưng trên lý thuyết :))


0

Đối với một đứa trẻ 10 tuổi muốn trở thành một hacker - tôi sẽ nói.

Hãy tưởng tượng nếu bạn có thể có một số tin tặc giỏi nhất thế giới ngồi cạnh bạn khi bạn hack đi .. và cứ sau đó họ sẽ nói .. "bạn biết nếu bạn làm như thế này ... [chèn mẫu] ... Sau đó, mã của bạn sẽ là [nhanh hơn / an toàn hơn / dễ bảo trì hơn / v.v. "" nó sẽ tuyệt đến mức nào.

Bây giờ tôi cho rằng cô ấy rất quan tâm đến ý tưởng - tôi sẽ không lãng phí thời gian để giải thích từng mẫu tôi sẽ đặt "nhiệm vụ hack" của cô ấy .. và sau đó đăng bài áp dụng một mẫu thiết kế và giải thích giá trị ... sau đó chỉ cho cô ấy một số tài nguyên tốt và xem nó đi đâu.

Nhưng chủ yếu cô ấy sẽ cần phải học chúng thông qua cố vấn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.