2013-04-15 16 views
5

Tôi đang cố gắng chuyển đổi ứng dụng C# mà chúng tôi đã phát triển sang ứng dụng iPad. Khi chúng tôi phát triển ứng dụng với khung Entity, tôi đang tìm kiếm một đối tác cho iOS.ORM cho SQLite trong iOS

Theo this answer, có một số thư viện ORM cho SQLite trong iOS:

Nhưng sau khi đọc từng trang web, tôi vẫn không thể quyết định sử dụng gói nào. Có ai có kinh nghiệm với một trong số họ cho tôi biết ưu điểm/nhược điểm của các gói không?

+2

Cậu nhìn vào lõi dữ liệu? http://developer.apple.com/library/ios/#documentation/DataManagement/Conceptual/iPhoneCoreData01/Introduction/Introduction.html –

+1

nếu bạn định thiết kế lại cơ sở dữ liệu tôi đồng ý với @SB., bạn nên thử Core Data, nhưng nếu bạn định sử dụng cùng một cơ sở dữ liệu (hoặc cấu trúc cơ sở dữ liệu) từ các thư viện mà bạn đề cập đến, tôi đã làm việc với fmdb với kết quả khá tốt, nó nhanh và dễ sử dụng (tôi chưa thử nghiệm những cái khác) – tkanzakic

+0

@tkanzakic Cảm ơn lời khuyên tuyệt vời của bạn. Việc thiết kế lại cơ sở dữ liệu là điều cuối cùng chúng ta muốn làm khi chúng ta đã có sẵn cơ sở dữ liệu từ ứng dụng C# hiện tại. –

Trả lời

2

Tôi đã xử lý số lượng giới hạn ORM trong một thời gian khá dài và cuối cùng tôi đã làm điều gì đó để cải thiện các tùy chọn hạn chế khả dụng. Tôi đã viết một ORM và phát hành nó theo một giấy phép BSD cho tất cả mọi người sử dụng. Nó được đăng trên GitHub.

6

CẬP NHẬT: DBAccess hiện đã được thay thế bằng mã nguồn mở ORM Shark. Chúng tôi gần đây đã phát hành miễn phí để phân phối và sử dụng ORM cho Objective-c/iOS được gọi là DBAccess, có thể tải xuống từ http://db-access.org/, đã mất vài năm để phát triển và hiện đã được triển khai trong nhiều ứng dụng.

Nó có thể không dành cho tất cả mọi người, nhưng tôi hy vọng nỗ lực của chúng tôi sẽ giúp một số người trong cộng đồng.

LƯU Ý, Tôi đã được cảnh báo rằng thực tế là biểu mẫu không tốt để quảng bá sản phẩm của riêng bạn trong diễn đàn như vậy, nhưng tôi chỉ muốn thêm rằng tôi chỉ đăng câu trả lời này cho OP Tôi cảm thấy nó mang lại một cái gì đó hữu ích cho bảng và tôi chân thành hy vọng nó sẽ chứng minh hữu ích cho một số người, ngay cả khi nó không phải cho tất cả mọi người.

CẬP NHẬT: DBAccess hiện đã được thay thế bằng mã nguồn mở ORM Shark. Nó tương thích với API và có sẵn trên github. http://sharkorm.comhttps://github.com/sharksync/sharkorm

Cảm ơn Adrian_H

+0

Giấy phép cho dự án của bạn là gì? Tôi hơi ngớ ngẩn khi thử nó mà không biết mình đang làm gì :). – Max

+0

Xin chào Max, chúng tôi sẽ cấp giấy phép MIT. Nó có vẻ dễ nhất và phù hợp nhất cho mong muốn của chúng tôi. –

+0

Xin chào Adrian, có hướng dẫn nâng cấp bảng nào không? Giống như thêm, đổi tên, xóa trường khỏi bảng? –

2

Cách tốt nhất để chuyển đổi một C# ứng dụng iOS là Xamarin tôi nghĩ rằng, có một thư viện sqlite-net, hoạt động tốt.

1

TL; DR: LabQLite:

  • là một ORM SQLite linh hoạt dành cho iOS
  • có trước bằng văn bản giữa và ở mức độ thấp soạn sẵn cho CRUD
  • đã sẵn bằng văn bản giữa và boilerplate mức thấp để kiểm soát cơ sở dữ liệu
  • các tập lệnh có vỏ bao gồm phân tích SQLite 3 db và kích hoạt các lớp kế thừa các phương pháp CRUD từ LabQLiteRow
  • có 100 bài kiểm tra đơn vị trong v1.0

Tiết lộ đầy đủ: Đây là thư viện mà tôi đã phát triển. Nó được phát hành vào phạm vi công cộng.

Version dài

Check-out LabQLite. Đó là một chút "đồng xu" (tùy thuộc vào giấy phép bạn nhận được), nhưng tôi nghĩ rằng nó là ứng cử viên mạnh nhất hiện có cho SQLite trên iOS.

Nó gửi kèm theo một kịch bản lệnh shell có thể phân tích tệp cơ sở dữ liệu SQLite của bạn cho bạn, nhổ ra các tệp lớp tương ứng với các bảng và dạng xem. Tôi nhận thấy bạn đã đề cập rằng bạn đang đến từ một dự án trước đó. Nếu bạn có thể xuất tệp db SQLite từ dự án đó, bạn có thể chạy và chạy với các lớp mô hình có thể sử dụng trong vài giây (tùy thuộc vào kích thước db) bằng cách sử dụng labqlitemodelgen.sh để có được tất cả các mô hình của bạn.

Lưu ý: Nếu bảng và quan điểm của bạn được đặt tên bằng dấu gạch dưới (ví dụ my_table_name), các lớp tương ứng được tạo ra sẽ làm theo quy ước đặt tên Objective-C (ví dụ MyTableName) - tương tự như vậy đối với các cột bảng để mô hình thuộc tính của lớp.

LabQLite trong phiên bản 1.0 có 100 bài kiểm tra đơn vị.

LabQLite cũng loại bỏ những gì tôi muốn gọi số bản đồ mức trung cấp. Nói cách khác, thường khi bạn nhận được tất cả ngôn ngữ C bản mẫu mức thấp được viết cho một dự án SQLite trên iOS, bạn vẫn phải viết phương thức CRUD cho mô hình của mình và có thể bạn phải viết phương thức trợ giúp (tùy thuộc vào ứng dụng của bạn)) quá. (EDIT: Điều này phổ biến với các giải pháp nguồn mở nhỏ hơn).

Với LabQLite, bạn không viết bp trung bình và thấp. Các lớp mô hình được tạo ra kế thừa từ một siêu lớp thực hiện tất cả điều đó cho bạn. Ngoài ra, các lớp được tạo không phải là mình chứa đầy các phương pháp CRUD - vì vậy các tệp lớp mô hình của bạn sẽ trông sạch hơn nếu chúng được lấp đầy bằng CRUD;)

Tích hợp nhanh chóng nếu bạn có tệp db SQLite trong gói ứng dụng:

/** 
@abstract Activates a global singleton shared instance of an 
LabQLiteDatabaseController with the database at the file path 
specified. 

@param filePath The file path to the sqlite3 database file in 
the local bundle. 

@param savePath The path (including file name) to which the 
sqlite3 database file retrieved from the main bundle should 
be saved. 

@param NSDocumentDirectoryIsRootPath Prepends the savePath with 
the path to the NSDocumentDirectory. 

@param overwrite If set to YES, then this method will overwrite 
any file it finds at the savePath. Otherwise, it will not. 

@param error The standard error capturing double indirection 
pointer. 

@return Whether the activation of the shared database controller 
was indeed successful. 

@see 
    initWithFileInFromLocalBundle:toBeCopiedToAndUsedFromDirectory:assumingNSDocumentDirectoryAsRootPath:overwrite:error: 
*/ 
+ (BOOL)activateSharedControllerWithFileFromLocalBundle:(NSString *)filePath 
        toBeCopiedToAndUsedFromDirectory:(NSString *)savePath 
       assumingNSDocumentDirectoryAsRootPath:(BOOL)NSDocumentDirectoryIsRootPath 
              overwrite:(BOOL)overwrite 
               error:(NSError **)error; 

Còn có các cách tiếp cận tích hợp nhanh khác nếu bạn không đặt tệp db SQLite trong gói ứng dụng của mình.

Mã được nhận xét đầy đủ với cả nhận xét nội dung và tài liệu trong suốt.

Một yếu tố khác cần xem xét là khả năng bảo trì. Chắc chắn, các phần mềm miễn phí có khả năng phát hiện nhanh chóng, nhưng những gì người ta nhanh chóng biết là (a.) Tích hợp khung/thư viện rất nhanh, nhưng (b.) Đảm bảo ứng dụng của bạn chậm hơn vì các thay đổi quan trọng trong ứng dụng của bạn yêu cầu thay đổi đáng kể mã mô hình của bạn (ví dụ: boilerplate trung bình và thấp).

LabQLite được viết bằng Objective-C và vì vậy có thể sử dụng được, ví dụ như trong các hệ thống cũ cũng như trong các ứng dụng hiện đại.

khái niệm LabQLite giống như một 'giản đồ có thể kéo dài'.'Đó là, nếu bạn muốn, bạn có thể:

  • đòn bẩy các chức năng thế hệ mô hình lớp và bộ điều khiển cơ sở dữ liệu cấp cao để xây dựng ứng dụng của bạn, hoặc
  • đòn bẩy điều khiển cơ sở dữ liệu duy nhất, và xây dựng các lớp học tùy chỉnh của bạn mà giao tiếp với các phương pháp xử lý của bộ điều khiển, hoặc
  • chỉ đơn giản là vượt qua NSString truy vấn vào đối tượng cơ sở dữ liệu hoặc điều khiển cơ sở dữ liệu đối tượng để xử lý

vì vậy, bạn không được đo ni vào sử dụng LabQLite như một ORM ... không phải hoàn toàn cũng không một phần. Thậm chí còn có các loại đối tượng được gọi là LabQLiteStipulation s, đóng gói logic cho các điều kiện. Vì vậy, có sự linh hoạt ở đó, quá.

Theo dõi số https://twitter.com/labitorysupport/ để biết các cập nhật.

Tóm tắt

Các thế mạnh của LabQLite là:

  • hội nhập Speedy của cơ sở dữ liệu
  • Tăng dự án bảo trì
  • hệ nhanh của mô hình đối tượng
  • linh hoạt giữa cao, trung và truy cập cấp thấp vào SQLite
  • thân thiện với các hệ thống di sản
  • Vâng ghi nhận trong mã
  • Respectably đơn vị thử nghiệm
Các vấn đề liên quan