2010-02-09 25 views
8

Vì vậy, tôi đang gặp một cái đầu so với thời điểm bức tường và hy vọng ai đó có thể đến giúp hoặc loại bỏ các bức tường hoặc dừng đầu tôi từ di chuyển !!Điều gì thật tuyệt vời về ORM?

Trong 3/4 tuần qua, tôi đã điều tra ORM sẵn sàng cho một dự án mới. ORM phải ánh xạ tới cơ sở dữ liệu SQL hiện có, lớn và cũ.

Vì vậy, tôi đã thử cận âm. Tôi thực sự thích v2 và v3 sau khi modding để làm việc độc đáo với VB và đặt tên lược đồ trong SQL đã được chạy OK. Tuy nhiên, sự thiếu linh hoạt của việc có tên thuộc tính thực thể riêng biệt so với tên cột đã khiến tôi kéo tóc ra (xin lỗi Rob).

Tôi đã thử Khung thực thể nhưng tôi thấy những người khác thiếu trong một số lĩnh vực nhất định.

Vì vậy, tôi bit viên đạn và cố gắng nHibernate nhưng sau một tuần hoặc lâu hơn làm cho nó làm việc như thế nào tôi thích (với sự giúp đỡ từ Codesmith để tạo ra các lớp/hbms cho tôi) Tôi thất vọng với thời gian cần thiết để khởi động (xây dựng một đối tượng cấu hình), mặc dù đã thử một số thủ thuật để giảm thời gian này.

Tôi chủ yếu là sau khi xây dựng một lớp DAL mà tôi có thể chia sẻ giữa các ứng dụng và trang web. Tôi đang sủa cây sai à? Đối với một dự án kế thừa với 100 bảng, tôi có nên quay lại ado.net và sử dụng DTO không? Aarrgh!

Xin lỗi về phong cách nghi vấn. Tôi không còn nhiều tóc và tôi muốn giữ những gì mình có !!

Xin cảm ơn trước, Ed

PS. Tôi nên thêm rằng tôi biết SQL rất tốt và không sợ bị bẩn tay để viết các truy vấn nhanh. Nếu bất kỳ điều gì tôi không cần phải ẩn khỏi SQL

+2

Những loại ứng dụng nào bạn có để thời gian khởi động nhibernate là một vấn đề? IMO, nó chỉ nên làm phiền bạn nếu bạn trực tiếp truy cập DB từ máy tính để bàn, không phải trong trường hợp của một dịch vụ trung cấp. –

+0

@ Dmitry: bạn đúng +1 –

+1

Bạn có thể đơn giản hóa điều này một cách khá đơn giản bằng cách hỏi "Làm cách nào để tăng tốc độ thời gian khởi động của ứng dụng NHibernate?". –

Trả lời

8

ORM cho phép của bạn:

  1. Để ánh xạ hàng bảng với các đối tượng, đó là các mảnh hoàn toàn khả thi của lập trình hướng đối tượng.
  2. Để tự động điều hướng thông qua các mối quan hệ đối tượng
  3. Để dễ dàng thêm, chỉnh sửa và xóa hàng bảng
  4. Để truy vấn cơ sở dữ liệu một cách trực quan hơn là bạn không phải nghĩ đến gia nhập (một này sẽ phụ thuộc vào ORM và phương pháp truy vấn)
  5. Để xử lý một cách minh bạch L1 và L2 cache.

Tất cả các điều trên sẽ phải được xử lý bằng tay nếu bạn không sử dụng ORM.

PS: Tôi đồng ý với Dmitry về thời gian khởi động NHibernate (xem bình luận câu hỏi). Bên cạnh đó, bạn đã thử Fluent NHibernate? Lưu loát NHibernate là ấn tượng dễ dàng. Tôi không thể tin vào mắt mình khi lần đầu tiên lập bản đồ một cơ sở dữ liệu. Nó thậm chí còn dễ dàng hơn các ORM độc quyền như DevExpress XPO.

+1

+1 để giới thiệu FluentNHibernate. Hiện đang sử dụng nó trên một dự án và nó thực sự là "ấn tượng dễ dàng". –

1

Theo kinh nghiệm của tôi, hầu hết các ORM kết thúc là phức tạp hơn SQL. Mà đánh bại toàn bộ mục đích của việc sử dụng chúng.

Một giải pháp mà tôi rất nhiệt tình là LINQ2SQL. Nó vượt trội như một lớp mỏng về các thủ tục lưu trữ hoặc khung nhìn. Nó thực sự dễ sử dụng và không cố gắng ẩn SQL.

+0

Tôi có thể thông cảm với vấn đề phức tạp; hầu hết các công cụ ORM rất phức tạp để cấu hình. Tôi cho rằng họ giải quyết một loạt các vấn đề phức tạp đáng kể để biện minh cho sự phức tạp của họ, và rằng giá trị thu được khi sử dụng chúng vượt quá mức phạt của việc học cách sử dụng chúng. –

+0

Andomar: ORMs, nói chung, đang phơi bày các đối tượng, chứ không phải SQL. Đó là toàn bộ điểm. Tại sao bạn sử dụng ORM nếu không ánh xạ các bảng quan hệ vào các đối tượng? Có lẽ ADO.NET phù hợp hơn với nhu cầu của bạn. –

+0

Andomar: Bạn đã xem @ PLINQO chưa? Tôi ánh xạ cùng một cơ sở dữ liệu với nó và Codesmith và kết thúc với ít lỗi hơn và thời gian thực hiện nhanh hơn nhiều - không có sự chậm trễ khởi động ra khỏi hộp. – CResults

2

Lợi ích lớn nhất của công cụ ORM là nó sẽ giúp bạn lớp ứng dụng của bạn một cách chính xác. Hầu hết các dự án hiện nay sử dụng một lớp dữ liệu để kết nối với cơ sở dữ liệu.Bạn bắt đầu từ công cụ ORM để tạo ra các lớp tương ứng với các đối tượng cơ sở dữ liệu của bạn. Sau đó, bạn xác định một giao diện bằng cách sử dụng các phương pháp này. Tất cả các mã kiên trì sử dụng các phương thức của giao diện này. Bằng cách này, lớp logic nghiệp vụ chỉ được kết hợp với giao diện tầng cao hơn này và không cần biết gì về cơ sở dữ liệu. Trong thực tế không nên có sự phụ thuộc vào ADO.NET hoặc thậm chí NHibernate.

Một ưu điểm khác của công cụ ORM là bạn bỏ cặp ứng dụng của mình khỏi máy chủ cơ sở dữ liệu. Bạn có thể thay đổi công cụ db và vẫn sử dụng cùng một mã. Ngoài ra, không chỉ có sự phức tạp của SQL mà ORM ẩn khỏi bạn. Nó cũng có thể giúp bạn với logic giao dịch và kết nối tổng hợp.

Tôi muốn nói rằng đối với các dự án mới, công cụ ORM là điều cần thiết. Đối với các dự án kế thừa, nó không mang lại nhiều lợi ích, trừ khi tất nhiên bạn có thời gian/tiền bạc để bắt đầu từ đầu.

+0

+1 để nhấn mạnh vào tách. Điều này một mình là lý do tôi mạnh mẽ ủng hộ các công cụ ORM và sử dụng mẫu kho lưu trữ. –

+3

Các công cụ ORM không giúp phân tách. Logic trình bày vẫn có thể sử dụng ADO.NET hoặc SQL thông qua các cơ chế ORM để nói chuyện với cơ sở dữ liệu. LinqToSql muốn trở thành lớp kinh doanh của bạn và thực sự làm cho nó khó khăn để tách kinh doanh và logic dữ liệu. Trong hầu hết các trường hợp, ORM không thể ẩn bất kỳ SQL nào từ bạn ngoài CRUD cơ bản và tra cứu theo kiểu truy vấn tên/id. ORM có thể hữu ích cho các dự án kế thừa và không phải lúc nào cũng hợp lý cho các dự án mới. –

+0

Các công cụ ORM * do * giúp tách riêng. Như tôi đã viết, đây không phải là điều duy nhất bạn cần làm, vì bạn vẫn cần phải định nghĩa các phương thức giao diện, nó sẽ ẩn phụ thuộc vào các thư viện ORM. Các phương thức này có thể sử dụng các lớp như 'Customer' hoặc 'Order' đã được tạo bằng công cụ ORM và ánh xạ tới cơ sở dữ liệu. – kgiannakakis

1

Về cơ bản có hai câu hỏi tại đây:

Điều gì tuyệt vời về ORM? Có những câu hỏi tương tự trên Stackoverflow. Xem:

Làm thế nào tôi có thể cải thiện thời gian khởi động NHibernate? Xem:

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