Mẫu thiết kế được sử dụng thường xuyên nhất là gì? [đóng cửa]


24

Những mẫu thiết kế nào bạn nghĩ là phổ biến nhất?


Cả hai, nếu có thể ...
Tamara Wijsman

"Chuyển đổi thay vì đa hình"?
mlvljr

@Bigown: Sau đó, bạn nên "chấp nhận" câu trả lời bạn thích nhất. Nếu bạn không thích bất kỳ câu trả lời nào, vui lòng cung cấp tiền thưởng.
Macneil

2
đã bỏ phiếu để đóng vì không mang tính xây dựng - về cơ bản đây là một cuộc thăm dò. Trừ khi ai đó có một nghiên cứu thực nghiệm để trích dẫn, tất cả các câu trả lời sẽ là phỏng đoán hoặc yêu thích (hoặc không yêu thích) và phiếu bầu sẽ phản ánh tình cảm cá nhân. Kết quả cuối cùng sẽ là một danh sách các mẫu thiết kế không có chiều sâu. Do đó, không mang tính xây dựng.
Steven A. Lowe

@Steven: Tôi khá chắc chắn Jay đúng với The Big Ball of Mud. :-)
Tamara Wijsman

Câu trả lời:


39

Tôi khá chắc chắn rằng phổ biến nhất là 'Quả bóng lớn'. Thật không may cho tất cả chúng ta.
http://en.wikipedia.org/wiki/Big_ball_of_mud


Đồng ý, khi bạn bắt đầu một dự án mới, mọi thứ đều có cấu trúc và tài liệu tốt, nhưng khi thời hạn đến gần, tất cả kết thúc như một quả bóng bùn lớn
Arturo Molina

3
@Arturo - Đó là một lý do có thể. Khác: 1) Dự án nhỏ được bắt đầu bởi lập trình viên thiếu kinh nghiệm thành công ngoài mong đợi, và sau đó phát triển vượt ra ngoài mục đích ban đầu. 2) Xu hướng của các lập trình viên thiếu kinh nghiệm được giao bảo trì, những người sau đó không có hướng dẫn hoặc hiểu về kiến ​​trúc ban đầu, vì vậy họ chỉ hack nội dung và điều đó trở nên tồi tệ hơn khi hệ thống già đi. 3) Nhóm sử dụng sai công nghệ hoặc công nghệ mới mà họ không quen thuộc và sử dụng nó kém trong một dự án mới, và nó bị sụp đổ trước thời hạn :)
Jay

1
LOL - nếu tôi có thể thêm nhiều điểm hơn cho bạn, tôi sẽ làm thế. Quan sát tuyệt vời (và buồn).
luis.espinal

25

MVC và các biến thể của nó chắc chắn là một trong những mẫu thiết kế hàng đầu.


2
Tôi sẽ nói rằng câu hỏi của OP khá ngớ ngẩn (tôi vẫn tin là như vậy). Tuy nhiên, câu trả lời của bạn là khá nhiều IMO đúng. Nếu có một mẫu (và các biến thể của nó) được sử dụng khá nhiều, thì đó là mẫu này. +1 cho câu trả lời tốt của bạn.
luis.espinal

21

Nếu bạn đang nói về các mẫu thiết kế của Gang-of-Four, tôi sẽ phải nói về Singleton . Đây là một tình trạng thực sự đáng buồn - gần như thể các lập trình viên nghe về sự kỳ diệu của các mẫu thiết kế và sau đó chỉ đơn giản dừng lại sau lần đầu tiên.

Nếu bạn đang nói về các mẫu kiểu kiến ​​trúc (nói cách khác, các mẫu thiết kế trải rộng trên nhiều lớp hoặc nhiều lớp) thì tôi sẽ phải nói MVC . Một vài cái phổ biến khác là mẫu kho lưu trữđịnh vị dịch vụ .


2
Càng buồn hơn khi bạn coi nhiều người coi Singleton là một phản mẫu!
RichardOD

1
@RichardOD, buồn vì mọi người coi nó là một khi nó không hay buồn khi mọi người sử dụng nó khi nó là một mô hình chống?
Matt Olenik

Ý tôi là buồn là nó rất phổ biến - nó dường như là một bài phỏng vấn yêu thích. Lần trước khi tôi được phỏng vấn, tôi đã được hỏi làm thế nào tôi sẽ viết mã cho Singleton và câu trả lời của tôi là tôi sẽ không sử dụng bộ chứa IoC như Unity để xử lý việc đó cho tôi.
RichardOD

@RichardOD - không phải là đơn lẻ mà nó được coi là một mô hình chống. Đó là việc sử dụng lạm dụng của nó là một mô hình chống. Rất ít trường hợp thực sự có nhu cầu / cần singleton và trong các môi trường có các thùng chứa kiểm soát mức độ chi tiết của tài nguyên, chúng thậm chí không cần thiết. Chẳng hạn, khi bạn nhìn thấy một singleton trong một cơ sở mã Java hiện đại, đó thường là một lá cờ đỏ cho việc sử dụng chống mẫu (không phải trên chính mẫu đơn.)
luis.espinal 24/211

@Jaco - Tôi sẽ có một khác biệt từ bạn. Tôi nghĩ rằng hỗn hợp, chiến lược và khuôn mẫu (và nhiều lần tái sinh của họ) đã trở nên xa hơn, phổ biến hơn nhiều so với singleton, đặc biệt vì chúng tôi đã tập trung vào thành phần cấu trúc so với thừa kế trong thập kỷ qua.
luis.espinal


7

Trang trí

Thêm chức năng cho một đối tượng trong thời gian chạy thông qua thành phần. Yêu thích cá nhân của tôi.

Chỉnh sửa: Ngoài ra Factory có lẽ là một trong những phổ biến nhất.


5

Mặt tiền

Hãy nghĩ về bất kỳ giao diện REST nào như Twitter hoặc SO API. Nó đang che giấu một loạt các công cụ cuối cùng, ít nhất là trong trường hợp twitters, có thể phức tạp khủng khiếp.

Tôi có quan tâm các tweet của bảng @ apklusk được lưu trữ trong không? Và nó có bộ nhớ cache nhanh? Và rằng @shemnon có lượng độc giả thấp như vậy, các tweet luôn bị hết bộ nhớ? Đó là sự kỳ diệu của Mặt tiền.


5

Mô hình chiến lược

Nếu bạn đã từng sử dụng tiêm phụ thuộc, bạn đã sử dụng mẫu chiến lược.


Đồng ý, chiến lược ngoài mẫu và kết hợp (và nhiều biến thể và kết hợp của chúng.)
luis.espinal

5

Tại sao không ai nhắc đến iterator ? Đặc biệt là với tất cả các bản đồ tạo nên các cấu trúc dữ liệu phức tạp ... đó là bản đồ tôi sử dụng nhiều nhất. Hay chúng ta đang nói về các mẫu mà chúng ta thực hiện lại?


3

Tôi ngạc nhiên không ai nhắc đến mẫu Factory, theo kinh nghiệm của tôi, đó là một trong những mẫu được sử dụng nhiều nhất (và cũng bị lạm dụng nhất) trong số các mẫu ngoài kia. Nếu không phải là đầu tiên, có lẽ là singleton nên là đầu tiên, tôi đã nghĩ rằng đây sẽ là một thứ hai gần gũi.


3

Cùng với câu trả lời trước đây của tôi, tôi sẽ thêm một câu hỏi mới mà tôi đã gặp hôm nay từ con thú của một dự án được kế thừa:

Sao chép dán

Trong khi gỡ lỗi, tôi chạy vào một đoạn mã gọi 2 hàm có tên tương tự:

if(x)
   Func1
else
   Func2

Func1 và Func2 có cùng tham số. Tôi kéo chúng ra và khác, và chúng giống nhau 100% ngoại trừ các cuộc gọi Func1 Func3 và Func2 gọi Func4. Tôi kéo chúng ra và làm chúng khác đi. 100% giống nhau, ngoại trừ 1 dòng. Vì vậy, một lập trình viên trước đó đã quyết định sao chép và dán hai hàm 50 dòng, thay vì thêm một tham số cờ, vào 2 hàm riêng được sử dụng ở đúng 1 vị trí. Nó làm tôi muốn khóc.


2

Nói về các mẫu thiết kế Gang-of-Four, tôi không thể nghĩ ra một chương trình không sử dụng mẫu Observer. Ngoài ra, như Jaco đã đề cập, Singleton cũng được sử dụng rất nhiều, thật không may, nó đã trở thành một cái búa (bất kỳ lập trình viên nào cũng sử dụng nó ngay cả khi nó không hoàn toàn cần thiết).


1
Hài hước, nhưng tôi chưa bao giờ có nhu cầu sử dụng Singleton. Nếu tôi cần một nơi nào đó để giữ trạng thái toàn cầu, tôi đặt nó vào một tệp cấu hình và sử dụng một lớp bình thường để truy cập nó.
Robert Harvey

Tất nhiên, trong những trường hợp đó, không cần thiết ... thế còn khi bạn thực sự cần một đối tượng để thực hiện một số công việc, đồng bộ và xử lý luồng an toàn. Singleton không chỉ để giữ trạng thái của một số biến tĩnh, nó là một đối tượng thực sự với công việc thực sự phải làm, v.v.
Cristian

Chỉ có thời gian tôi từng thấy cần nó là kết nối cơ sở dữ liệu. Điều đó nói rằng, gần như mọi lớp "Dịch vụ" (đọc: tương tự như nhà máy) trong dự án này tại nơi làm việc là một singleton, được lưu trữ trong $_SESSIONbiến PHP .
Tarka

2

Thông dịch viên

Hiếm khi thực hiện, thường được sử dụng. Bộ chọn XPATH, XSLT, Regex, jQuery, v.v.


1

Tôi ngạc nhiên không ai nói "Builder". Hoặc "Bộ chuyển đổi". Chúng có thể không kỳ lạ như một số trong những cái khác được đề cập, nhưng tôi sử dụng chúng mọi lúc. Factory và Tóm tắt Factory cũng rất phổ biến (nhưng chúng đã được sử dụng).




0

Ở cấp độ thiết kế phần mềm, tôi sẽ lập luận rằng Hợp chất, Chiến lược và Mẫu (và với một phần mở rộng ít hơn, Nhà máy) là cách sử dụng rộng rãi nhất. Trong thập kỷ qua, chúng tôi đã thấy một ưu tiên cho thành phần hơn sự kế thừa khi xây dựng các hệ thống của chúng tôi bằng cách sử dụng thiết kế OO. Do đó, sự kết hợp của các mẫu vừa được đề cập đóng vai trò quan trọng hơn nhiều so với tất cả các mẫu IMO khác.

Về mặt kiến ​​trúc, tôi sẽ tranh luận về MVC cho doanh nghiệp và các mẫu dựa trên các máy trạng thái ở mặt được nhúng.

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.