2011-07-31 35 views
7

Chúng tôi có ứng dụng kiểu hộp giày mà chúng tôi muốn tạo công dân hạng nhất trong Lion. Điều này có nghĩa là tích hợp Tự động lưu & Phiên bản trong số những thứ khác. Hiện tại, chúng tôi không có mô hình tập trung vào tài liệu và chúng tôi chỉ sử dụng một ngăn xếp Dữ liệu cốt lõi đơn giản.Ứng dụng Hộp thư/Thư viện với Tự động lưu & Phiên bản trong OS X Lion

UIPersistentDocument cung cấp một cách thực sự dễ dàng để tích hợp cả Auto-Save & phiên bản và tôi thấy hai lựa chọn chúng ta có thể lựa chọn để tích hợp với các API mới:

  1. “Lạm dụng” NSPersistentDocument cho các ứng dụng hộp giày mang phong cách của chúng tôi . Về mặt kỹ thuật, nó sẽ là một ứng dụng dựa trên tài liệu, nhưng giao diện người dùng sẽ vẫn là thư viện giống như iPhoto. Điều này làm cho khái niệm không phải là rất nhiều ý nghĩa, nhưng chúng tôi sẽ nhận được rất nhiều chức năng miễn phí.
  2. Giữ ngăn xếp Dữ liệu chính đơn giản hiện tại và triển khai Tự động lưu & Phiên bản theo cách thủ công.

Tôi nghe ý kiến ​​trái ngược từ đại diện của Apple về cách tiếp cận chúng tôi nên thực hiện và sẽ tuyệt vời để làm rõ mọi thứ trước khi chúng tôi bắt đầu triển khai. Trong khi tôi nghĩ rằng 1. không nên được sử dụng nó cũng rất hấp dẫn, bởi vì chúng tôi nhận được rất nhiều miễn phí. Tôi thậm chí không thể tìm thấy đủ tài liệu về việc triển khai Tự động lưu & Phiên bản trong ứng dụng Dữ liệu lõi.

tôi sẽ thực sự có xu hướng sử dụng 1. nhưng tôi thấy một số vấn đề:

  • Tôi lo lắng về xung đột tập tin hệ thống cấp khi sử dụng các phiên bản và chỉ có một cơ sở dữ liệu tập tin. Tôi không thể tìm thấy bất kỳ tài liệu nào về chủ đề này.
  • Tôi lo lắng về các vấn đề về hiệu suất trong Phiên bản khi duyệt qua "không gian".
  • Chúng tôi không thể thực thi chỉ một phiên bản của cơ sở dữ liệu mở, vì các phiên bản phải mở một số phiên bản. Tôi lo lắng về các tác dụng phụ và các vấn đề tương tranh. Về mặt khái niệm, nó trông giống như một hack và tôi không thích hack.

Nếu chúng tôi chỉ muốn tích hợp đồng bộ hóa iCloud, tôi chắc chắn sẽ không nghĩ đến việc sử dụng mô hình tập trung vào tài liệu cho ứng dụng của chúng tôi, vì Core Data hỗ trợ trực tiếp. Tôi hầu như lo lắng về chi phí của nhà phát triển, chúng tôi sẽ có nếu chúng ta tuân theo mô hình không dựa trên tài liệu hiện tại của chúng tôi.

Bạn có lời khuyên hay ý tưởng nào về việc các ứng dụng hộp giày nên được tích hợp trong thế giới Lion mới không?

+1

"Ứng dụng kiểu hộp giày" là gì? – TechZen

+1

Ứng dụng thư viện hoặc hộp thư là ứng dụng chứa tất cả dữ liệu của bạn bên trong một cửa sổ thay vì sử dụng nhiều tài liệu. Ví dụ điển hình cho các ứng dụng kiểu hộp giày là iPhoto, iTunes; các ví dụ hay cho các ứng dụng dựa trên tài liệu là Pages hoặc Keynote. Mặc dù iTunes và iPhoto là các ứng dụng shoebox nhưng chúng vẫn làm việc với một thư viện “rằng chính nó là một tài liệu và bạn có thể chuyển đổi giữa các thư viện khác nhau. –

Trả lời

3

Tôi e rằng bạn bị buộc phải sử dụng tùy chọn đầu tiên. Các phiên bản được thực hiện bên trong NSDocumentController * sic * và vì vậy bạn sẽ phải sử dụng một số loại NSDocument để có được bất kỳ thứ gì ngoài phiên bản. Tôi nghĩ rằng bạn cũng phải thêm Cửa sổ ứng dụng của mình trong một tài liệu NSWindowController vào tài liệu đó để có trình đơn bật lên nhỏ đẹp mắt ở trên cùng. Vấn đề là phiên bản ít nhiều là một tính năng hoàn toàn mờ đục ...

Nhưng có một câu hỏi bạn phải tự trả lời: Phần nào của ứng dụng bạn muốn đưa vào phiên bản? Có thực sự có ý nghĩa khi có mọi thứ trong một tệp khi nói đến khôi phục dữ liệu không? Việc khôi phục phiên bản (trừ bản sao & dán) xảy ra ở cấp hệ thống tệp. Và do đó, nó thực sự có ý nghĩa để luôn luôn có tất cả mọi thứ phục hồi cùng một lúc? Nếu câu trả lời của bạn là không, bạn có thể thậm chí phải cắt bạn mô hình thành nhiều tệp nhỏ hơn ...

Đừng mong đợi cải thiện ở đây cho đến lần phát hành chính tiếp theo. Đó là những gì tôi đoán từ các nhận xét của kỹ sư ...

+1

+1 Phiên bản chỉ có ý nghĩa trong bối cảnh tài liệu là cùng một nội dung phát triển thêm giờ. Nó không có ý nghĩa để có "phiên bản" khác nhau của một cửa hàng cơ sở dữ liệu tất cả-trong-một bởi vì bạn thường chỉ muốn nắm bắt trạng thái hiện tại của dữ liệu. Trong một cơ sở dữ liệu, một "phiên bản" mới hầu như luôn được coi là dữ liệu mới. Nếu bạn cần một cái gì đó như versioning trong một cơ sở dữ liệu, bạn thiết kế nó vào chính mô hình dữ liệu vì nó hiếm khi đơn giản như chỉ có dữ liệu được nhập vào các thời điểm khác nhau như trường hợp với phiên bản tài liệu. – TechZen

+0

@Max: Bạn cũng có thể sử dụng NSFileVersion và tạo giao diện người dùng của riêng bạn cho các phiên bản, nhưng bạn sẽ không nhận được Giao diện người dùng thời gian máy ưa thích mà tất cả mọi người thường sử dụng. Tôi không nghĩ rằng đó là lợi ích cho người dùng từ góc độ UX nếu mọi ứng dụng sẽ có giao diện người dùng phiên bản tùy chỉnh của riêng mình. Ngoài ra còn có vấn đề mà NSPersistentDocument * hỗ trợ * lưu dựa trên bản ghi cho các mô hình Dữ liệu cốt lõi dựa trên SQLite. Đối với tôi, có vẻ như việc triển khai chưa hoàn tất, bởi vì sự tiến hóa tự nhiên sẽ là các phiên bản cũng hỗ trợ các sửa đổi dựa trên bản ghi (thay vì dựa vào tệp). Việc chia nhỏ mô hình sẽ không hoạt động (Shoebox). –

+0

@TechZen: Vâng, về cơ bản bạn đã đúng. Nhưng sau đó một tài liệu là gì? Bạn có thể có các tài liệu dựa trên dữ liệu cốt lõi bên trong NSFileWrapper mà vẫn giữ một mô hình hoàn chỉnh với các tệp phụ trợ. Nếu chúng ta lấy một cuốn sách ví dụ, bạn vẽ đường ở đâu? Có phải mọi tài liệu đều là một cuốn sách có các chương bên trong hay là một tài liệu một thư viện chứa các sách khác nhau và bạn có các thư viện riêng biệt như nghiên cứu, vui, truyện tranh? Dữ liệu cốt lõi không phải là cơ sở dữ liệu và API không cho phép bạn tương tác với các mô hình của mình như với cơ sở dữ liệu cổ điển. Hơn nữa NSPersistentDocument và iCloud đã có hỗ trợ ghi trên đĩa CD. –

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