Những mẫu thiết kế nào bạn nghĩ là phổ biến nhất?
Những mẫu thiết kế nào bạn nghĩ là phổ biến nhất?
Câu trả lời:
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
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.
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ữ và định vị dịch vụ .
Người quan sát
Nếu bạn đã từng sử dụng một sự kiện. Bạn đã sử dụng Observer.
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.
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.
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?
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.
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.
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).
$_SESSIONbiến PHP .
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.
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).
Tôi không nghĩ rằng nó được liệt kê trong GoF, nhưng tôi luôn sử dụng các biến thể của nó.
Ở 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.