2012-02-25 19 views
5

Câu hỏi này chủ yếu hướng tới Miguel là người tạo ra MT.Dialog nhưng tôi cũng muốn nghe ý kiến ​​của người khác. Tôi hiện đang tái cấu trúc dự án có nhiều chế độ xem bảng. Tôi tự hỏi nếu tôi nên thay thế tất cả chúng với MT.Dialog.Monotouch.Dialog có phải là sự thay thế phù hợp cho tất cả các bản xem trước không?

ưu của tôi là:

  • dễ sử dụng
  • mã đơn giản
  • hy vọng rằng Xamarin sẽ cung cấp cho nó chéo nền tảng một ngày

Nhược điểm:

  • của tôi các ô được tùy chỉnh hoàn chỉnh. Liệu nó có ý nghĩa trong trường hợp đó?
  • hiệu suất? Đó có phải là một vấn đề không?
  • phá vỡ mô hình MVC (nguồn không còn tách ra khỏi tầm nhìn và điều khiển)

Có nói chung tốt hơn để chỉ cần sử dụng MT.Dialog hoặc kế thừa từ nó đối với trường hợp sử dụng cụ thể? Kinh nghiệm của bạn là gì?

+0

Tôi có xu hướng sử dụng nó cho các trường hợp tôi cần thực hiện nhập dữ liệu trong bảng. Đối với các bảng chỉ hiển thị thông thường, tôi tiếp tục thực hiện chúng theo cách thủ công. – Jason

Trả lời

4

Tôi sử dụng MonoTouch.Dialog (và nó là QuickDialog anh em cho objc) khá nhiều mỗi khi tôi sử dụng một tableview. Nó giúp ích rất nhiều cho việc đơn giản hóa mã và cung cấp cho bạn một trừu tượng tốt hơn về một bảng.

Có một ngoại lệ, đó là khi bảng sẽ có hàng nghìn hàng nghìn hàng và dữ liệu nằm trong cơ sở dữ liệu. MT.D/QD yêu cầu bạn tải tất cả các dữ liệu trả trước, vì vậy bạn có thể tạo các phần, và đó chỉ đơn giản là quá chậm nếu bạn không có các đối tượng trong bộ nhớ.

Về "phá vỡ MVC", tôi đồng ý với bạn. Tôi không bao giờ thực sự sử dụng các ràng buộc phản chiếu trong MT.D vì thực tế đó. Thông thường tôi sẽ tạo ra gốc từ đầu trong mã, hoặc sử dụng một cái gì đó như JSON (trong ngã ba của tôi https://github.com/escoz/MonoMobile.Forms), để các đối tượng miền của tôi không cần biết về MT.D.

11

Để giải quyết một số câu hỏi của bạn.

Sự khác biệt chính giữa MonoTouch.Dialog và UITableView là với trước đây bạn "tải" tất cả dữ liệu mà bạn muốn hiển thị trước và sau đó quên nó. Bạn để MonoTouch.Dialog chăm sóc vẽ nó, đẩy các khung nhìn và chăm sóc các phần/phần tử. Với UITableView, bạn cần cung cấp các phương thức gọi lại để trả về số phần, tiêu đề cho các phần và chính dữ liệu.

UITableView có lợi thế là hiển thị một triệu hàng có cùng kích thước và cùng một ô, bạn không thực sự phải tải tất cả dữ liệu trả trước, bạn chỉ có thể đợi để được gọi lại. Điều đó đang được nói, điều này sẽ phá vỡ nhanh chóng nếu bạn sử dụng các ô có chiều cao khác nhau, vì UITableView sẽ phải truy vấn kích thước của tất cả các hàng của bạn.

Vì vậy, trong ngắn hạn:

(1) có, thậm chí nếu bạn sử dụng các tế bào tùy chỉnh, bạn sẽ được hưởng lợi từ mã ngắn hơn và một mô hình lập trình đơn giản hơn. Cho dù bạn sử dụng các tính năng khác của nó hay không, là tùy thuộc vào bạn.

(2) Đối với hiệu suất, vấn đề sẽ ghi lại số lượng hàng bạn sẽ có.Như tôi đã đề cập trước đây, nếu bạn đang duyệt một tập dữ liệu có khả năng lớn, bạn sẽ phải tải tất cả các ô đó trong bộ nhớ ở phía trước, hoặc giống như TweetStation, thêm các tính năng để tải "theo yêu cầu".

Thực tế là nó sẽ tiêu thụ nhiều bộ nhớ hơn, vì bạn cần tải dữ liệu của mình trong MonoTouch.Dialog. Kỹ thuật tối ưu hóa tốt nhất của bạn là giữ cho Elements của bạn rất nhẹ. Tweetstation ví dụ sử dụng một "TweetElement" mà chỉ giữ ID cho tweet, và tải các nội dung thực tế theo yêu cầu, để giữ cho kích thước của TweetElement trong bộ nhớ rất nhỏ.

Với UITableView, bạn không thanh toán cho mức giá đó. Nhưng nếu bạn không sử dụng một cơ sở dữ liệu nào đó, dữ liệu sẽ vẫn nằm trong bộ nhớ.

Nếu ứng dụng của bạn yêu cầu dữ liệu nằm trong bộ nhớ, thì bạn cũng có thể di chuyển dữ liệu thành các phần tử và sử dụng làm mô hình của bạn.

(3) Đây là một chút của một người đàn ông rơm. "Nguồn" dữ liệu của bạn không bao giờ thực sự độc lập với UIKit. Tôi biết rằng mọi người thích nói về các mô hình này như là có thể tái sử dụng, nhưng trong thực tế, bạn sẽ không bao giờ có thể tái sử dụng một UITableViewSource như một nguồn cho bất cứ điều gì nhưng một UITableView. Việc sử dụng chính là hỗ trợ các điều khiển có thể mở rộng mà không yêu cầu dữ liệu được nạp vào bộ nhớ phía trước, nó không thực sự tách riêng Mô hình khỏi Chế độ xem. Vì vậy, những gì bạn thực sự có là một lớp bộ chuyển đổi kết nối thế giới của UITableView với mô hình dữ liệu thực tế của bạn (cơ sở dữ liệu, danh sách XML, mảng trong bộ nhớ, kết nối Redis).

Với UITableView, mã bộ điều hợp của bạn sống trong hàm tạo và UITableViewSource. Với MonoTouch.Dialog, mã adatpro của bạn sẽ tồn tại trong mã để nạp RootElement ban đầu vào DialogViewController.


Vì vậy, có những lý do để sử dụng UITableView qua MonoTouch.Dialog, nhưng nó là không ai trong số những người ba Nhược điểm.

+0

Tôi hiểu. Trong dữ liệu thực hiện hiện tại đến từ một cơ sở dữ liệu nhưng tất cả các nút con hiện tại nằm bên trong bộ điều khiển xem bảng trong bộ nhớ. Điều này có nghĩa là tôi cũng có thể chuyển sang MT.Dialog. Ý bạn là gì khi giữ nguyên tố nhỏ? Nếu phần tử của bạn chỉ chứa ID, phần dữ liệu còn lại được lưu trữ ở đâu? Nó có quan trọng nơi nó được lưu trữ không? Là MT.Dialog sử dụng các ô có giá trị hay nó tạo ra tất cả các ô trước? – Krumelur

+1

@Miguel Làm thế nào về "hy vọng rằng Xamarin sẽ cung cấp nó qua nền tảng một ngày" bit? –

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