2008-11-10 33 views
10

Tôi bắt đầu một dự án mà tôi nghĩ sẽ được hưởng lợi từ các ràng buộc (tôi có một bảng danh sách nguồn, một số chế độ xem trình duyệt, v.v.), nhưng tôi nghĩ nó cũng khá khả thi và có thể dễ hiểu hơn nếu không có chúng. Từ kinh nghiệm hạn chế của tôi, tôi đã tìm thấy các ràng buộc khó khắc phục và rất "ma thuật" (ví dụ: rất khó để chèn nhật ký ở bất cứ đâu để tìm ra nơi mà mọi thứ đang bẻ gãy, mọi thứ đều hoạt động hoặc không).Tôi có nên sử dụng kết buộc Cocoa cho dự án mới nhất của mình không?

Đây có phải là sự thiếu kinh nghiệm khi nói chuyện (trong trường hợp này tôi có thể ngồi xuống và dành thời gian để hiểu rõ ràng buộc và mong đợi mọi thứ trở nên rõ ràng hơn). tự viết mã theo cách mà tôi chắc chắn tôi có thể hiểu và khắc phục sự cố.

Trả lời

21

Sử dụng Bindings.

Lưu ý rằng bạn phải theo mẫu MVC để tận dụng tối đa các ràng buộc. Đây là dễ dàng hơn có vẻ như, như ca cao làm gần như tất cả mọi thứ cho bạn hiện nay:

  1. Xem: NSView và lớp con (tất nhiên), NSCell và lớp con, NSWindow và lớp con
  2. Bộ điều khiển: NSController và lớp con (đặc biệt là NSArrayController)
  3. mẫu: Core Data

Nếu bạn đang không sử dụng Core Data, sau đó bạn có thể ro sẽ là đối tượng mô hình của riêng bạn, nhưng điều này là dễ dàng. Hầu hết các phương thức của các đối tượng này sẽ là các trình truy cập đơn giản, bạn chỉ có thể @synthesize nếu bạn đang nhắm mục tiêu Leopard.

Bạn thường không thể thoát khỏi việc không viết bất kỳ mã nào, nhưng Bindings có thể cho phép bạn viết mã rất ít.

Đề xuất đọc:

+0

Ngoài ra ràng buộc, sau khi hiểu chúng, rất dễ dàng và có thể thực sự mạnh mẽ, đối với tôi, không có lý do gì để không sử dụng chúng. –

8

Bindings có thể có vẻ huyền diệu trong tự nhiên. Để hiểu được sự kỳ diệu đằng sau sự ràng buộc, tôi nghĩ người ta phải hiểu rõ về KVC/KVO. Tôi thực sự có ý nghĩa sâu sắc.

Tuy nhiên, trong trường hợp của tôi (mới đến Obj-C - 9 tháng), một khi tôi nhận được các ràng buộc KVC/KVO là một hộp. Nó đã làm giảm đáng kể mã keo của tôi và làm cho cuộc sống của tôi dễ dàng hơn đáng kể. Các ràng buộc gỡ lỗi đã trở thành một trường hợp đảm bảo các thay đổi giá trị khóa của tôi có thể quan sát được. Tôi thấy rằng tôi có thể dành nhiều thời gian hơn viết những gì ứng dụng của tôi được cho là làm thay vì đảm bảo rằng chế độ xem phản ánh dữ liệu.

Tôi đồng ý mặc dù các ràng buộc có tính đe dọa cao lúc đầu.

5

cách tiếp cận chung của tôi là để bắt đầu nhiều như possib le sử dụng các ràng buộc và xem mọi thứ diễn ra như thế nào.Tuy nhiên, nếu một yếu tố giao diện bắt đầu trở nên có vấn đề khi sử dụng các ràng buộc hoặc nỗ lực nhiều hơn giá trị của nó thì tôi không ngần ngại quay trở lại sử dụng các phương pháp truyền thống hơn (ví dụ: nguồn dữ liệu, hành động). Tôi đã tìm thấy những điều này có thể khá khó dự đoán trước thời hạn, nhưng tôi nghĩ rằng các ràng buộc ưu tiên tốt hơn trong thời gian dài, miễn là bạn không hiểu quá nhiều về việc gắn bó với chúng trong các tình huống khi chúng không cung cấp bất kỳ lợi ích nào.

4

Sau một thời gian làm việc với Bindings tôi đã thấy rằng nó không phải là phép thuật chút nào, nghĩ rằng đó là công nghệ tiên tiến đầy đủ. Gỡ lỗi một giao diện bị ràng buộc có các kỹ thuật khác nhau hơn so với một giao diện dán, nhưng một khi bạn có những kỹ thuật, những lợi thế về tái sử dụng, bảo trì và nhất quán là IMO đáng kể.

+1

Bạn có thể xây dựng hoặc chỉ cho tôi hướng dẫn bất kỳ hướng dẫn/tài liệu về kỹ thuật gỡ lỗi cho các giao diện bị ràng buộc không? –

+0

Một trong những điều đơn giản nhất là giao diện và mô hình chỉ được kết hợp với các đường dẫn chính, thật dễ dàng để phân tích hoặc giả lập các phần của mô hình bằng cách ràng buộc giao diện của bạn với trình điều khiển thử nghiệm thay vì mô hình thực. –

2

Có vẻ như tôi sử dụng các ràng buộc, KVO và các phương pháp nguồn dữ liệu đều như nhau trong các ứng dụng của tôi. Nó thực sự phụ thuộc vào ngữ cảnh. Ví dụ, trong một trong các dự án của tôi, tôi sử dụng các ràng buộc chỉ ở mọi nơi ngoại trừ khung nhìn của cửa sổ chính, đủ phức tạp đến mức tôi không muốn cố gắng gắn nó vào một NSTreeController. Đồng thời tôi cũng sử dụng KVO để tải lại các đối tượng UI và theo dõi các phụ thuộc trong các đối tượng mô hình của tôi.

Điều quan trọng cần lưu ý khi học các chủ đề Ca cao nâng cao như Bindings hoặc Core Data là bạn phải hiểu tất cả các công nghệ đằng sau chúng; tất cả mọi thứ từ các giao thức nguồn dữ liệu, thông báo KVO, và như vậy. Một khi bạn đã có đủ kinh nghiệm làm việc với họ để biết làm thế nào "ma thuật" hoạt động, bạn sẽ có thể tích hợp các công cụ cấp cao hơn vào ứng dụng của bạn một cách dễ dàng.

Trong trường hợp cụ thể của bạn, bạn sẽ phải quyết định xem nó có đáng để thêm thời gian để tìm hiểu các ràng buộc trên đầu trang phát triển ứng dụng của bạn hay không. Nếu có thể, nó có thể có lợi cho bạn để phát triển một nguyên mẫu đơn giản của ứng dụng của bạn bằng cách sử dụng bindings, vì vậy bạn biết làm thế nào để phù hợp nhất với các mảnh với nhau khi bạn bắt đầu dự án thực tế.

1

Đối với những người tò mò, tôi đã kết thúc bằng cách sử dụng bindings và sau một vài ngày họ đột nhiên chỉ bắt đầu "làm cho tinh thần". Vì vậy, tôi chắc chắn sẽ khuyên bạn nên chỉ cần đi trước và dành thời gian để tìm hiểu chúng. Tôi cũng tìm thấy lời khuyên của Brian Webster khá hữu ích, vì tôi đã thực sự kết thúc làm một số thứ theo cách cũ, hoặc bởi vì các ràng buộc không thể làm những gì tôi muốn hoặc bởi vì nó sẽ rất phức tạp để làm những gì tôi cần bằng cách sử dụng các ràng buộc.

2

Ý kiến ​​của tôi là có, bạn nên áp dụng các ràng buộc; công nghệ này được hiểu rõ và ổn định ngay bây giờ, và nó đáng làm cho số lượng mã bạn không còn cần phải viết nữa. Khi lần đầu tiên tôi chuyển sang các ràng buộc, tôi đã gặp một chút rắc rối khi nhận được thời gian quan sát và quan sát các đối tượng để phù hợp, và với sự cố giao diện người dùng vì nó đang quan sát một đối tượng hợp lệ nhưng không đúng. Một khi bạn đã nhìn thấy những vấn đề một vài lần, biết làm thế nào để tránh chúng và làm thế nào để phát hiện chúng nếu chúng xuất hiện trở nên đơn giản. Ish. Tôi vẫn muốn cho "sự kiện này ở đây gây ra cập nhật này ở đây" dấu vết trong trình gỡ lỗi, nhưng tôi vẫn vui vì tôi đã thực hiện di chuyển.

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