it-swarm-vi.com

Thiết kế tương tác để sao chép cây con

Giả sử chúng ta có hai cây dữ liệu A và B được trực quan hóa trong giao diện người dùng dọc theo các dòng này:

enter image description here

Người dùng muốn sao chép các nút cây con được tô sáng từ A đến B. Hai cây có một số nút được chia sẻ như được chỉ định bởi id.

Làm thế nào bạn sẽ thiết kế sự tương tác cho kịch bản này? Một cách tiếp cận có thể là đặt các hộp kiểm bên cạnh các nút không chia sẻ và nút "thực thi"/"sao chép" ở giữa hai cây, nhưng đây có phải là giải pháp tốt nhất khi chọn không tham gia kéo?

Bạn có bất cứ ý tưởng cho thiết kế thay thế?

6
agib

Đó là điều tự nhiên đối với cây cho phép bạn kéo-n-drop đến sắp xếp lại nút; tuy nhiên, bạn dường như muốn giữ cấu trúc phân cấp và chỉ hợp nhất kết quả ...

Do đó, có thể hữu ích cho ứng dụng chỉ xác định sự khác biệt và sau đó cho phép người dùng chọn/cam kết mỗi thay đổi (chèn, cập nhật hoặc xóa.)

1
Nescio

Trừ khi tôi thiếu một số ràng buộc, tôi sẽ sử dụng kéo và thả.

1
Hisham

Cú pháp hành động lựa chọn đối tượng như bạn đề xuất là một cách tiếp cận GUI tiêu chuẩn phổ biến nên sử dụng nếu bạn sẽ mở rộng nó thành các lệnh khác ngoài sao chép (ví dụ: xóa, di chuyển, thuộc tính). Điều này làm cho một giao diện người dùng đơn giản, nhất quán, nhưng mạnh mẽ. Tuy nhiên, tôi không chắc chắn rằng tôi đã đề xuất các hộp kiểm để lựa chọn. Giả sử người dùng thường chỉ sao chép một nút cấp cao hơn tại một thời điểm, tôi sẽ bắt chước hành vi trong các trình quản lý tệp như Windows Explorer và sử dụng các biểu tượng được chọn theo mặc định, nhưng hỗ trợ đa lựa chọn thông qua metakeys (Shift và Ctrl) và lựa chọn kéo. Chọn một nút sẽ làm nổi bật nút đó và tất cả các nút phụ của nó để giúp làm cho nó rõ ràng những gì người dùng đang chọn. OTOH, các hộp kiểm có thể được ưu tiên nếu người dùng thường cần sao chép nhiều nút không liên kết, đặc biệt là nếu bạn có thể chắc chắn rằng họ đã quen thuộc với các phương pháp đa lựa chọn tiêu chuẩn.

Thay thế cho cú pháp hành động lựa chọn đối tượng là cách tiếp cận kiểm soát dành riêng cho đối tượng trong đó bạn bao gồm một điều khiển Sao chép nhỏ cho mỗi nút. Một cú nhấp chuột và nó sao chép. Điều này có thể được ưa thích nếu sao chép là điều duy nhất người dùng có thể làm với các nút. Ngược lại, việc có các điều khiển Sao chép, Di chuyển, Xóa, Thuộc tính, v.v. riêng biệt cho mỗi nút có thể sẽ quá lộn xộn. Nếu bạn đi với điều khiển dành riêng cho đối tượng, bạn chỉ có thể trình bày một điều khiển Sao chép cho các nút trong A có các nút được chia sẻ trong B, cung cấp một dấu hiệu rõ ràng về những gì có thể được sao chép.

Trong ví dụ của bạn, có vẻ như tính năng Sao chép của bạn bị giới hạn trong việc sao chép vào các nút được chia sẻ giữa các cây. Đó thực sự là tất cả những gì có thể được cho phép? Có phải luôn luôn có nhiều hơn một cây đích? Nếu vậy, nút Sao chép duy nhất của bạn có lẽ là tốt nhất và bạn có thể tránh xa việc kéo và thả. Kéo và thả có khả năng khám phá kém và khó thực hiện hơn là chỉ cần nhấp vào nút Sao chép. Kéo và thả cũng có thể khiến người dùng nghĩ rằng họ có thể thực hiện sao chép tùy ý (ví dụ: đặt Node 4 trong Cây A dưới Node 18 trong Cây B hoặc thậm chí di chuyển các nút xung quanh bên trong Cây B).

Tuy nhiên, nếu điều đó có thể và thuận lợi để hỗ trợ sao chép tùy ý, thì hãy xem xét việc có hai nút để sử dụng thành ngữ Sao chép và Dán (thêm nút Cắt thứ ba để hỗ trợ di chuyển). Nếu bạn hỗ trợ sao chép tùy ý, thì nó cũng đáng xem xét khi có kéo và thả như một lối tắt chuyên gia để Sao chép và Dán.

1
Michael Zuschlag