2009-05-08 25 views
31

Chúng tôi đang bắt đầu phát triển một ứng dụng trong nhà trong chương trình dành cho nhà phát triển iPhone Enterprise. Vì nó gần với hệ điều hành 3.0, chúng tôi đang xem xét lại thiết kế ban đầu của chúng tôi bằng cách sử dụng SQLite và sử dụng Core Data thay thế. Dưới đây là một số thông tin khác:Dữ liệu chính so với SQLite dành cho các nhà phát triển có kinh nghiệm SQL

  • Có ứng dụng dành cho máy tính để bàn cũ thay thế. Chúng tôi sẽ sử dụng lại phần cuối hiện có.
  • Hiện tại chúng tôi có cơ sở dữ liệu SQLite được tạo như một bằng chứng về khái niệm. Điều này về cơ bản là một phiên bản cắt giảm của cơ sở dữ liệu phía sau hiện có.
  • Chúng tôi sẽ tải dữ liệu từ một trang web từ xa và lưu trữ dữ liệu cục bộ, nơi nó sẽ tồn tại và cần phải có. Chúng tôi chỉ cập nhật nó nếu nó đã thay đổi, mà sẽ là mỗi tháng hoặc hai. Chúng tôi rất có thể sẽ sử dụng XML hoặc JSON để chuyển dữ liệu.
  • Có hai nhà phát triển trong dự án này và cả hai chúng tôi đều có kỹ năng SQL mạnh nhưng không ai đã sử dụng Dữ liệu cốt lõi.

Câu hỏi của tôi là: Lợi ích của Dữ liệu cốt lõi qua SQLite, lợi ích sẽ là gì trong trường hợp cụ thể này và làm lợi ích cho việc học một khung mới thay vì sử dụng các kỹ năng SQL mạnh hiện tại?

EDIT: Tôi vừa nhận thấy câu hỏi này: Core Data vs SQLite 3. Do đó, tôi đoán câu hỏi của tôi là:

  • Nếu tôi phải kiểm tra xem một mục cụ thể có tồn tại hoặc có bản cập nhật, dễ sử dụng SQL không, liệu dữ liệu cốt lõi có hợp lý không? Tôi có thể tải đối tượng đầu tiên trong biểu đồ và kiểm tra số phiên bản mà không tải toàn bộ biểu đồ không?
  • Nếu chúng ta đã biết SQL, các ưu điểm của Dữ liệu cốt lõi cho dự án này có biện minh cho chúng ta không?
+0

Câu trả lời hay, cảm ơn - Tôi sẽ đưa tất cả thông tin này vào cuộc thảo luận thiết kế tiếp theo của chúng tôi. – Don

+3

Cũng giống như bản cập nhật, chúng tôi đã đi với Dữ liệu cốt lõi; Tôi thực sự vui vì chúng tôi đã làm. Chỉ những khả năng bị lỗi đã làm cho nó đáng giá, nhưng có nhiều ưu điểm bên cạnh. Tôi muốn khuyến khích bất cứ ai, bất kể cấp độ kỹ năng SQL, chọn Core Data. Đường cong học tập là nông và những lợi ích như lỗi, độc đáo, KVO/KVC, và chuyển đổi đối tượng lưu trữ rất nhiều. – Don

Trả lời

18

Như bạn đã đọc Core Data vs SQLite 3, bạn biết rằng Core Data và cơ chế bền bỉ (SQLite trong trường hợp này) là chủ yếu trực giao. Core Data thực sự là về quản lý một đồ thị đối tượng và trường hợp sử dụng chính của nó là cho thành phần mô hình của một kiến ​​trúc MVC. Nếu ứng dụng của bạn phù hợp với kiến ​​trúc này, nó có thể đáng giá bằng cách sử dụng Dữ liệu cốt lõi vì nó sẽ giúp bạn tiết kiệm rất nhiều mã trong thành phần mô hình. Nếu bạn đã có thành phần mô hình hoạt động (ví dụ: từ ứng dụng dành cho máy tính để bàn hiện có), thì Dữ liệu cốt lõi sẽ không mua cho bạn nhiều. Một cách tiếp cận lai là có thể - bạn có thể thực hiện sự lưu giữ/truy vấn của riêng mình và xây dựng một Dữ liệu cốt lõi trong kho lưu trữ bộ nhớ mà bạn cư trú với kết quả truy vấn và sử dụng lưu trữ trong bộ nhớ này thông qua Dữ liệu lõi làm thành phần mô hình cho ứng dụng của bạn. Điều này không phổ biến, nhưng tôi đã thực hiện nó và không có rào cản lớn.

Để trả lời câu hỏi cụ thể của bạn:

  1. Bạn có thể gán một số phiên bản cho toàn bộ cửa hàng liên tục và lấy thông tin đó thông qua +[NSPersistentStore metadataForPersistentStoreWithURL:error:], mà không cần mở cửa hàng. An đương nhiên +setMetadata:forPersistentStoreWithURL:error cũng tồn tại, tất nhiên. Nếu bạn muốn lưu trữ thông tin phiên bản trong một cá thể thực thể thay vì trong siêu dữ liệu lưu trữ liên tục, bạn chỉ có thể tải một đối tượng duy nhất. Với một kho lưu trữ bền vững SQLite, Core Data thực hiện công việc rất tốt chỉ tìm nạp những gì bạn cần.

  2. API NSPredicate, rất dễ học và dường như thực hiện công việc biên soạn tốt cho SQL. Ít nhất là đối với cơ sở dữ liệu kích thước bạn có thể phù hợp trên một chiếc iPhone, nó chắc chắn là đủ (hiệu suất khôn ngoan) trong kinh nghiệm của tôi. Tôi nghĩ rằng câu hỏi SQL vs Core Data là hơi sai lầm, tuy nhiên. Một khi bạn nhận được kết quả của một truy vấn bạn sẽ làm gì với nó? Nếu bạn cuộn của riêng mình, bạn sẽ phải khởi tạo các đối tượng, xử lý lỗi/duy nhất (nếu bạn không muốn tải toàn bộ kết quả truy vấn vào bộ nhớ ngay) và tất cả các cơ sở quản lý đồ thị đối tượng khác đã được Core cung cấp Dữ liệu.

+0

Giao diện người dùng hiện tại là ứng dụng .NET 1.1, vì vậy không có tái sử dụng ở đó. Chúng tôi sẽ sử dụng nó như là một mô hình trong một ứng dụng MVC, đó là điều khiến tôi suy nghĩ về nó. Siêu dữ liệu, chỉ tải một đối tượng duy nhất và NSPredicate - đây là tất cả thông tin tuyệt vời! Cảm ơn. – Don

6

Có vẻ như bạn đã có dự án được thiết kế bằng cách sử dụng SQLite và bạn có kinh nghiệm trong lĩnh vực đó.

Vì vậy, dòng dưới cùng là, nó có ý nghĩa để chuyển dự án này, Core Data sẽ cho tôi bất cứ điều gì mà tôi chưa có trong thiết kế ban đầu của tôi?

Giả sử rằng thiết kế ban đầu đã được thực hiện đúng cách, dựa trên các yêu cầu về DỰ ÁN NÀY, có thể nó không đáng giá.

Nhưng đó không phải là kết thúc của cuộc thảo luận. Có những thứ khác để suy nghĩ về: Dự án tiếp theo của tôi có yêu cầu cơ sở dữ liệu nhẹ như vậy không? Tôi có cần gửi sớm không, do hạn chế về thời gian hoặc ngân sách? Giả sử tôi sẽ phải học dữ liệu cốt lõi sớm hay muộn, bây giờ không có ý nghĩa gì không? Tôi có thể quan tâm đến việc chuyển mã của mình sang máy Mac không?

Câu trả lời cho những câu hỏi này có thể dẫn bạn đến quyết định có, nó thực sự đáng để quay trở lại bảng vẽ để nói, và tìm hiểu Core Data là gì.

Để đến câu hỏi cuối cùng của bạn: Ưu điểm là gì? Vâng, Core Data là một sự trừu tượng hóa cơ sở dữ liệu của bạn, nó cũng lưu trữ dữ liệu bất khả tri (vì vậy nếu một phiên bản tương lai của iPhone đã bỏ qua SQLite cho một phiên bản MySQL được nhúng ... không, nhưng đó là một ví dụ) Dữ liệu sẽ yêu cầu VERY vài thay đổi mã để làm cho nó hoạt động với kho dữ liệu mới. Core Data sẽ cung cấp rất nhiều tính di động nhanh chóng cho nền tảng Mac. Core Data sẽ xử lý phiên bản của mô hình dữ liệu của bạn, trong khi trừ khi bạn có một khung công tác hoặc một quy trình làm việc để quản lý nó, truy cập trực tiếp vào SQLite sẽ không.

Tôi chắc rằng người trả lời khác có thể đưa ra những lợi thế khác và có thể là một số lý do chính đáng để KHÔNG gây rối với Dữ liệu cốt lõi. Ngẫu nhiên, trong một tình huống tương tự, quyết định của tôi là chuyển sang cấp độ cao hơn, khung công tác mới hơn. Nhưng trong trường hợp của tôi, nó là cho một dự án phụ, và ngày và ngân sách tàu không phải là yếu tố.

+0

Cảm ơn bạn đã nhập.Có, thiết kế ban đầu đã được thực hiện với SQLite trong tâm trí, nhưng không có gì đã được bắt đầu được nêu ra, và nếu dữ liệu cốt lõi, ví dụ, làm cho xem bảng dễ dàng hơn để thực hiện, sau đó nó đủ sớm mà chúng ta có thể chuyển đổi nó ra. – Don

2

Không làm giảm diễn đàn này, nhưng bạn có thể tìm thấy nhiều người trả lời hơn với trải nghiệm có liên quan theo ngữ cảnh tại Apple iPhone DevForum.

Nói từ quan điểm quản lý dự án thuần túy, có vẻ như bạn biết cách xây dựng những gì bạn muốn xây dựng bằng cách sử dụng SQLite, và như vậy sẽ có ý nghĩa hơn với tôi để bạn bắt đầu dọc theo tuyến đường đó.

Điều đó đang được nói, CoreData xây dựng trên đầu trang của SQLite và nếu bạn đang cố gắng tận dụng các phần khác của hệ thống cùng với dữ liệu của bạn, ví dụ: sử dụng KVC/KVO hoặc các ràng buộc, sau đó bạn có thể nhanh chóng thấy rằng chức năng này đáng để học đường cong.

= Mike

+0

Điểm tốt - không biết tại sao tôi nghĩ đến việc hỏi ở đây trước. KVO và ràng buộc chính xác là loại ưu điểm không xảy ra với tôi và là điểm cộng lớn. – Don

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