2010-06-07 25 views
5

Tôi đang suy nghĩ một số ý tưởng xung quanh một mẫu để sử dụng cho trường hợp sau.Mẫu thiết kế để đóng gói chức năng chung giữa các điều khiển giao diện người dùng

Tôi có một số kiểm soát của bên thứ 3 mà tôi muốn thêm chức năng phổ biến vào. Chức năng được thêm vào bằng cách xử lý một số sự kiện và làm những việc nhất định khi các sự kiện cháy cùng với việc thêm một số biến riêng tư để giữ một số thông tin trạng thái giữa các sự kiện. Tôi muốn sử dụng lại mã và chức năng vì vậy đây là những gì tôi thường làm.

Tạo một lớp cho chức năng này và chuyển vào thể hiện của điều khiển mà tôi muốn thêm chức năng vào trong hàm tạo.

Sau đó, tôi có thể thêm trình xử lý sự kiện vào điều khiển trong thể hiện của lớp.

Có ai có thể nghĩ về các mẫu thay thế để sử dụng để tạo ra loại chức năng có thể sử dụng lại này không?

Trả lời

0

"Mẫu thiết kế" được áp dụng nhiều nhất là Người quan sát. Chức năng có thể tái sử dụng mà bạn muốn phát triển có thể được thực hiện như các nhà quan sát đơn giản của Control, đăng ký một số tập hợp các sự kiện Kiểm soát. May mắn thay, Windows Forms Controls thực hiện nhiều sự kiện, làm cho nó có thể thêm chức năng từ bên ngoài lớp học gần như dễ dàng như từ bên trong, bởi phân lớp thông thường. Ví dụ: bạn có thể thêm hỗ trợ kéo và thả bằng cách triển khai người quan sát đã đăng ký DragOver và DragDrop (và có thể DragLeave) và thực hiện các tác vụ thích hợp dựa trên dữ liệu DragDropEvent.

Đây là một kỹ thuật tuyệt vời để xem xét, vì nó cho phép bạn phát triển chức năng như vậy một lần và thêm nó vào nhiều Điều khiển.

+0

Khi bạn nhận được xuống thịt và xương của những gì tôi đã làm, đó là tất cả những người quan sát đằng sau hậu trường. Sẽ không có điểm nào trong việc mở rộng hơn nữa nó ra ngoài và tạo ra các giao diện Observer và làm theo một hướng dẫn mô hình nghiêm ngặt. Về cơ bản tôi đang tạo ra một lớp mà tôi vượt qua trong sự kiểm soát trong constructor và sau đó tôi đại biểu các sự kiện để xử lý các sự kiện kiểm soát. Mô hình sự kiện trong .NET được coi là một mẫu Observer. – Dan

+0

Tôi đồng ý rằng điều này rất đơn giản để triển khai với API điều khiển hiện tại. Tôi chỉ muốn nói rằng cách tiếp cận của bạn là tốt nhất. – bbudge

+0

Cảm ơn bạn đã mô tả về mẫu Observer. – Dan

1

Bạn có thể muốn có một cái nhìn tại:

  1. Facade Pattern
  2. Decorator pattern
  3. Observer pattern

Các mẫu mặt tiền sẽ cho phép bạn đóng gói hành vi của các kiểm soát dưới lớp hiện tại. Mẫu trang trí sẽ cho phép bạn có thể tạo các điều khiển có thể xếp chồng. Mẫu người quan sát sẽ cho phép bạn quản lý các sự kiện.

+0

Mẫu mặt tiền sẽ không đóng gói chức năng trong điều khiển độc đáo vì mẫu mặt tiền không được giữ trạng thái giữa các cuộc gọi phương thức cho điều khiển (theo yêu cầu của tôi như được nêu). Với mô tả của tôi, việc sử dụng mẫu quan sát sẽ không có ý nghĩa trong kịch bản này. Trang trí, ok có thể cái này có thể phù hợp;) .... Nếu tôi sai, xin vui lòng cho tôi biết, vì tôi muốn hiểu rõ hơn về cách bạn đề xuất thực hiện điều này với các mẫu này. – Dan

+0

Thực ra, tôi nghĩ Steven khá đúng ở đây. Bạn sử dụng mặt tiền để tạo giao diện thống nhất cho các điều khiển giao diện người dùng (nghĩ: UserControl). Khái niệm về trang trí tương tự như việc sử dụng bên thứ ba thông qua sáng tác và thêm chức năng cụ thể. Người quan sát sẽ được sử dụng để kiểm soát cấp cao nhất để phản hồi khi một sự kiện xảy ra trên điều khiển của bên thứ ba. –

+0

Tôi hiểu tại thời điểm hiện tại Observer phù hợp với nó. Mặc dù, về mặt kỹ thuật, giải pháp của tôi là người quan sát và mô hình Sự kiện biểu mẫu trong .NET một mình có thể được coi là một mẫu Observer. Việc impelementing một Observer pattern vào mis không có ý nghĩa vì giải pháp của tôi đã khá đơn giản và đang sử dụng một mô hình Observer rồi. – Dan

0

Tôi cảm thấy rằng mẫu Observer sẽ hữu ích. Đây là cách bạn có thể sử dụng nó:

UtilityClass mà chấp nhận một điều khiển (như bạn đã đề cập): làm cho nó quan sát

Đăng ký lớp Utility khác nhau (và do đó kiểm soát) để khác nhau Sự kiện nó quan tâm đến: Quan sát

Bây giờ khi một sự kiện cụ thể xảy ra, nó sẽ cập nhật nhiều người quan sát khác nhau, tại đó bạn có thể ủy quyền sự kiện cơ bản. ing dựa trên sự kiểm soát và sự kiện.

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