Tôi có một số hành động (ví dụ: sao chép, dán, hoàn tác, làm lại, hiển thị cửa sổ có thể gắn đế XYZ, thu phóng, v.v.) Tôi không muốn sao chép ở nhiều vị trí nhưng được chia sẻ bởi các phần khác nhau của GUI như menu chính, thanh công cụ và các menu chuột phải.Cách tốt nhất để chia sẻ hành động giữa các lớp GUI riêng biệt (menu, thanh công cụ, vv)
Cách tốt nhất để chia sẻ chúng là gì? Tôi đang sử dụng Qt 5.3 với C++, nhưng điều này chủ yếu là độc lập với bất kỳ khuôn khổ GUI hoặc ngôn ngữ cụ thể nào.
Một số khả năng:
chỉ định một vị trí trung tâm, nói rằng cửa sổ chính, để tạo ra tất cả chúng với văn bản của họ, biểu tượng, và gọi lại. Sau đó:
Chuyển các hành động đến hàm tạo khi tạo thành phần phụ của GUI. Điều này có thể làm cho danh sách các hàm tạo constructor khá dài.
Bộ định tuyến cuộc gọi trên các thành phần phụ của GUI sau khi cấu phần con được xây dựng và chuyển tất cả các hành động cần thiết. Điều này làm cho các nhà xây dựng ngắn hơn nhưng không có nhiều đẹp hơn cuối cùng.
Cung cấp getters từ cửa sổ chính và yêu cầu các thành phần con nhận được hành động mà họ muốn. Các thành phần con thường có một con trỏ tới cửa sổ chính. Điều này làm cho nó để cửa sổ chính là không biết gì về những người quan tâm về hành động, nhưng nó cũng cho thấy một loạt các thành viên công cộng (trừ khi tôi sử dụng Attorney-Client idiom hoặc tương tự).
Thêm chúng vào một kho lưu trữ toàn cầu, riêng biệt, nơi cửa sổ chính thêm chúng và người dùng tìm kiếm chúng theo tên hoặc khóa hoặc thứ gì đó, nếu cần. Điều này tương tự như các tùy chọn khác nhưng tách các mối quan tâm tốt hơn một chút và chỉ hiển thị một trình thu thập thông số duy nhất thay vì một loạt các getters cụ thể. Nhược điểm: Điều này thêm một đối tượng toàn cầu-ish mà mọi người truy cập.
Xác định hành động trong trường hợp sử dụng "chính", menu chính và sau đó có getters cho mọi người khác. Điều này đặt chúng ở một nơi và có nghĩa là cửa sổ chính sẽ cần phải cung cấp một hàm getter đơn cho menu chính thay thế. Nhưng nó vẫn cho thấy một loạt các thành viên nội bộ là công khai.
Cách tiếp cận tốt nhất là gì? Có điều gì tốt hơn mà tôi chưa liệt kê ở đây không?
Để trả lời cho câu hỏi của bạn, chúng được yêu cầu hiển thị ở nhiều nơi có nghĩa là nhiều lớp cần truy cập vào chúng. Đoạn thứ hai của bạn dường như đề xuất 1,1 hoặc 1,4 của tôi là tốt nhất. Cả hai đều có thể cho phép tiêm phụ thuộc. – metal
@metal yeah, tôi hoàn toàn quay lại giải pháp 1.4, điều này sẽ giúp kiểm tra dễ dàng hơn, làm cho mọi thứ trở nên dễ dàng hơn, nếu bạn lo ngại mọi thứ phụ thuộc vào một đối tượng , thêm một giao diện mà đối tượng có thể lấy được từ, điều này ít nhất sẽ cho phép 'cắm và chạy' với các triển khai khác nhau của đối tượng và sẽ phá vỡ sự phụ thuộc mã nguồn giữa chúng. –