2012-09-06 7 views
5

Tôi tự hỏi nguyên tắc OOP tốt là gì, nếu trong ứng dụng iOS, có UITreeViewUINodeView, với đối tượng UITreeView có một số rootNodeView và nhánh gốc này tắt với leftChildNodeViewrightChildNodeView.Trong nguyên tắc OOP tốt, nên một nodeView yêu cầu được thêm vào một cây, hoặc nên một cây thêm nodeView?

Nếu mỗi đối tượng UINodeView có thể được "kéo và thả" bất kỳ vị trí nào trong màn hình, được thực hiện trong bộ xử lý -touchesMoved của UINodeView - đó là nguyên tắc OOP tốt? Ngoài ra, nếu một nodeView mới foo thực sự gần với một trong các nút không có con trái hoặc phải, nút foo có thể được thêm vào nút đó khi còn nhỏ.

Và tôi giả sử nếu một nút khác là bar và cũng không có cha mẹ (nghĩa là, cũng đang lúng túng), có nghĩa là foo cũng có thể được thêm làm con của bar.

Nếu điều này là foo nútView "yêu cầu quyền từ nút được thêm làm con trái hoặc phải" và "thêm nó nếu được phép" hoặc nên UIViewController hoặc UITreeView phát hiện thấy nút đang di chuyển bên trong chính nó và " quyết định rằng nó gần với một nút khác (của tất cả các nút trên màn hình) và không có con trái hoặc phải, và thêm foo như một đứa trẻ "?

Rõ ràng nếu chỉ một nút trong cây có thể thêm một nút con, thì UITreeView có thể thực hiện công việc, nhưng nếu bất kỳ nút (treo lủng lẳng hay không) có thể là một phụ huynh, sau đó UIViewController hoặc giao diện chính UIView dường như cần để làm công việc đó.

Làm theo cách này hay cách khác vi phạm nguyên tắc OOP tốt?

+0

Bạn có thể đăng một số mã không? Giống như một trong đó sẽ xử lý những thay đổi, điều khiển và xem. –

Trả lời

1

Tôi muốn nói rằng UITreeView nên xử lý điều này và các nút nên thông báo cho anh ta thông qua giao thức/đại biểu-truyền thông về thay đổi vị trí. TreeView là đối tượng duy nhất có thể kiểm tra, nếu thay đổi vị trí của một nút dẫn đến va chạm với nút khác, v.v.

Nếu bạn muốn viết mã OOP thực sự tốt, hãy thử sử dụng "Model-View-Controller" -Pattern, nơi View của bạn là TreeView, Model của bạn sẽ giữ tất cả các đối tượng Node-Data và cung cấp một số phương thức để phát hiện va chạm giữa các nút và Controller của bạn sẽ nhận được thay đổi vị trí từ khung nhìn của bạn. để thực hiện và sau đó thực hiện các hành động apprioate (như thêm một nút làm lá của một nút khác).

Bằng cách đó, bạn hoàn toàn linh hoạt cho các thay đổi trong tương lai, như sử dụng cơ sở dữ liệu thay vì RAM để lưu trữ dữ liệu hoặc sử dụng mã cho iPad thay vì iPhone bằng cách thay thế Chế độ xem.

0

Tôi đồng ý với stk, cần có sự phân biệt rõ ràng giữa Mô hình, đó là việc triển khai các quy tắc kinh doanh và (các) Chế độ xem, đó là biểu diễn trực quan.

Đoạn tiết lộ là mới nhất:

Rõ ràng nếu chỉ một nút trong cây có thể thêm một nút con, thì UITreeView có thể thực hiện công việc, nhưng nếu bất kỳ nút (treo lủng lẳng hay không) có thể là một phụ huynh , sau đó là UIViewController hoặc chế độ xem chính UIView dường như cần phải thực hiện công việc.

Nói cách khác, Mô hình của bạn tùy thuộc vào quy tắc kinh doanh.Bạn cần phải thiết kế logic để bạn có thể thể hiện các quy tắc. Nếu bạn có các nút nổi tự do, thì rõ ràng chúng phải giữ logic đính kèm.

Vì vậy, tách logic cây/nút khỏi logic Xem.